Add disconnect request/response for the future

This commit is contained in:
Jon Häggblad
2024-02-07 10:18:23 +01:00
parent 8cccc9ab24
commit b21346064e
3 changed files with 59 additions and 0 deletions
+24
View File
@@ -60,6 +60,20 @@ impl IpPacketRequest {
)
}
pub fn new_disconnect_request(reply_to: Recipient) -> (Self, u64) {
let request_id = generate_random();
(
Self {
version: CURRENT_VERSION,
data: IpPacketRequestData::Disconnect(DisconnectRequest {
request_id,
reply_to,
}),
},
request_id,
)
}
pub fn new_ip_packet(ip_packet: bytes::Bytes) -> Self {
Self {
version: CURRENT_VERSION,
@@ -71,6 +85,7 @@ impl IpPacketRequest {
match &self.data {
IpPacketRequestData::StaticConnect(request) => Some(request.request_id),
IpPacketRequestData::DynamicConnect(request) => Some(request.request_id),
IpPacketRequestData::Disconnect(request) => Some(request.request_id),
IpPacketRequestData::Data(_) => None,
}
}
@@ -79,6 +94,7 @@ impl IpPacketRequest {
match &self.data {
IpPacketRequestData::StaticConnect(request) => Some(&request.reply_to),
IpPacketRequestData::DynamicConnect(request) => Some(&request.reply_to),
IpPacketRequestData::Disconnect(request) => Some(&request.reply_to),
IpPacketRequestData::Data(_) => None,
}
}
@@ -101,6 +117,7 @@ impl IpPacketRequest {
pub enum IpPacketRequestData {
StaticConnect(StaticConnectRequest),
DynamicConnect(DynamicConnectRequest),
Disconnect(DisconnectRequest),
Data(DataRequest),
}
@@ -131,6 +148,13 @@ pub struct DynamicConnectRequest {
pub reply_to_avg_mix_delays: Option<f64>,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
pub struct DisconnectRequest {
pub request_id: u64,
// The nym-address the response should be sent back to
pub reply_to: Recipient,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
pub struct DataRequest {
pub ip_packet: bytes::Bytes,
+24
View File
@@ -105,6 +105,7 @@ impl IpPacketResponse {
match &self.data {
IpPacketResponseData::StaticConnect(response) => Some(response.request_id),
IpPacketResponseData::DynamicConnect(response) => Some(response.request_id),
IpPacketResponseData::Disconnect(response) => Some(response.request_id),
IpPacketResponseData::Data(_) => None,
IpPacketResponseData::Error(response) => Some(response.request_id),
}
@@ -114,6 +115,7 @@ impl IpPacketResponse {
match &self.data {
IpPacketResponseData::StaticConnect(response) => Some(&response.reply_to),
IpPacketResponseData::DynamicConnect(response) => Some(&response.reply_to),
IpPacketResponseData::Disconnect(response) => Some(&response.reply_to),
IpPacketResponseData::Data(_) => None,
IpPacketResponseData::Error(response) => Some(&response.reply_to),
}
@@ -137,6 +139,7 @@ impl IpPacketResponse {
pub enum IpPacketResponseData {
StaticConnect(StaticConnectResponse),
DynamicConnect(DynamicConnectResponse),
Disconnect(DisconnectResponse),
Data(DataResponse),
Error(ErrorResponse),
}
@@ -210,6 +213,27 @@ pub enum DynamicConnectFailureReason {
Other(String),
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct DisconnectResponse {
pub request_id: u64,
pub reply_to: Recipient,
pub reply: DisconnectResponseReply,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub enum DisconnectResponseReply {
Success,
Failure(DisconnectFailureReason),
}
#[derive(Clone, Debug, Serialize, Deserialize, thiserror::Error)]
pub enum DisconnectFailureReason {
#[error("requested nym-address is not currently connected")]
RequestedNymAddressNotConnected,
#[error("{0}")]
Other(String),
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct DataResponse {
pub ip_packet: bytes::Bytes,
@@ -305,6 +305,14 @@ impl MixnetListener {
)))
}
fn on_disconnect_request(
&self,
_disconnect_request: nym_ip_packet_requests::request::DisconnectRequest,
) -> Result<Option<IpPacketResponse>> {
log::info!("Received disconnect request: not implemented, dropping");
Ok(None)
}
async fn on_data_request(
&mut self,
data_request: nym_ip_packet_requests::request::DataRequest,
@@ -411,6 +419,9 @@ impl MixnetListener {
IpPacketRequestData::DynamicConnect(connect_request) => {
self.on_dynamic_connect_request(connect_request).await
}
IpPacketRequestData::Disconnect(disconnect_request) => {
self.on_disconnect_request(disconnect_request)
}
IpPacketRequestData::Data(data_request) => self.on_data_request(data_request).await,
}
}