From 3fde9e648f237e720460905a56e312e64f4ec084 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=20H=C3=A4ggblad?= Date: Sat, 10 Feb 2024 23:53:03 +0100 Subject: [PATCH] Add health request response --- Cargo.lock | 1 + common/ip-packet-requests/Cargo.toml | 1 + common/ip-packet-requests/src/request.rs | 10 ++++++++++ common/ip-packet-requests/src/response.rs | 20 +++++++++++++++++++ .../ip-packet-router/src/mixnet_listener.rs | 4 ++++ 5 files changed, 36 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index 8b97ab3f0a..e4fc250373 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6732,6 +6732,7 @@ version = "0.1.0" dependencies = [ "bincode", "bytes", + "nym-bin-common", "nym-sphinx", "rand 0.8.5", "serde", diff --git a/common/ip-packet-requests/Cargo.toml b/common/ip-packet-requests/Cargo.toml index c6b5d918e1..e4b1f7311a 100644 --- a/common/ip-packet-requests/Cargo.toml +++ b/common/ip-packet-requests/Cargo.toml @@ -11,6 +11,7 @@ license.workspace = true [dependencies] bincode = "1.3.3" bytes = "1.5.0" +nym-bin-common = { path = "../bin-common" } nym-sphinx = { path = "../nymsphinx" } rand = "0.8.5" serde = { workspace = true, features = ["derive"] } diff --git a/common/ip-packet-requests/src/request.rs b/common/ip-packet-requests/src/request.rs index d962f10737..71f26d3c40 100644 --- a/common/ip-packet-requests/src/request.rs +++ b/common/ip-packet-requests/src/request.rs @@ -92,6 +92,7 @@ impl IpPacketRequest { IpPacketRequestData::Disconnect(request) => Some(request.request_id), IpPacketRequestData::Data(_) => None, IpPacketRequestData::Ping(request) => Some(request.request_id), + IpPacketRequestData::Health(request) => Some(request.request_id), } } @@ -102,6 +103,7 @@ impl IpPacketRequest { IpPacketRequestData::Disconnect(request) => Some(&request.reply_to), IpPacketRequestData::Data(_) => None, IpPacketRequestData::Ping(request) => Some(&request.reply_to), + IpPacketRequestData::Health(request) => Some(&request.reply_to), } } @@ -126,6 +128,7 @@ pub enum IpPacketRequestData { Disconnect(DisconnectRequest), Data(DataRequest), Ping(PingRequest), + Health(HealthRequest), } // A static connect request is when the client provides the internal IP address it will use on the @@ -197,6 +200,13 @@ pub struct PingRequest { pub reply_to: Recipient, } +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] +pub struct HealthRequest { + pub request_id: u64, + // The nym-address the response should be sent back to + pub reply_to: Recipient, +} + #[cfg(test)] mod tests { use super::*; diff --git a/common/ip-packet-requests/src/response.rs b/common/ip-packet-requests/src/response.rs index 5c50bd715e..29553fa3e9 100644 --- a/common/ip-packet-requests/src/response.rs +++ b/common/ip-packet-requests/src/response.rs @@ -148,6 +148,7 @@ impl IpPacketResponse { IpPacketResponseData::UnrequestedDisconnect(_) => None, IpPacketResponseData::Data(_) => None, IpPacketResponseData::Pong(response) => Some(response.request_id), + IpPacketResponseData::Health(response) => Some(response.request_id), IpPacketResponseData::Error(response) => Some(response.request_id), } } @@ -160,6 +161,7 @@ impl IpPacketResponse { IpPacketResponseData::UnrequestedDisconnect(response) => Some(&response.reply_to), IpPacketResponseData::Data(_) => None, IpPacketResponseData::Pong(response) => Some(&response.reply_to), + IpPacketResponseData::Health(response) => Some(&response.reply_to), IpPacketResponseData::Error(response) => Some(&response.reply_to), } } @@ -198,6 +200,9 @@ pub enum IpPacketResponseData { // Response to ping request Pong(PongResponse), + // Response for a health request + Health(HealthResponse), + // Error response Error(ErrorResponse), } @@ -319,6 +324,21 @@ pub struct PongResponse { pub reply_to: Recipient, } +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct HealthResponse { + pub request_id: u64, + pub reply_to: Recipient, + pub reply: HealthResponseReply, +} + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct HealthResponseReply { + // Return the binary build information of the IPR + pub build_info: nym_bin_common::build_information::BinaryBuildInformationOwned, + // Return if the IPR has performed a successful routing test. + pub routable: Option, +} + #[derive(Clone, Debug, Serialize, Deserialize)] pub struct ErrorResponse { pub request_id: u64, diff --git a/service-providers/ip-packet-router/src/mixnet_listener.rs b/service-providers/ip-packet-router/src/mixnet_listener.rs index 95d668b83e..4ebd2a2e14 100644 --- a/service-providers/ip-packet-router/src/mixnet_listener.rs +++ b/service-providers/ip-packet-router/src/mixnet_listener.rs @@ -533,6 +533,10 @@ impl MixnetListener { log::info!("Received ping request: not implemented, dropping"); Ok(vec![]) } + IpPacketRequestData::Health(_) => { + log::info!("Received health request: not implemented, dropping"); + Ok(vec![]) + } } }