pr work
This commit is contained in:
@@ -271,6 +271,34 @@ impl RPCProcessor {
|
||||
)
|
||||
}
|
||||
}
|
||||
#[instrument(level = "trace", skip_all, err)]
|
||||
pub(crate) async fn process_private_route_first_hop(
|
||||
&self,
|
||||
operation: RoutedOperation,
|
||||
sr_pubkey: DHTKey,
|
||||
private_route: &PrivateRoute,
|
||||
) -> Result<(), RPCError> {
|
||||
let PrivateRouteHops::FirstHop(pr_first_hop) = &private_route.hops else {
|
||||
return Err(RPCError::protocol("switching from safety route to private route requires first hop"));
|
||||
};
|
||||
|
||||
// Switching to private route from safety route
|
||||
self.process_route_private_route_hop(
|
||||
operation,
|
||||
pr_first_hop.node.clone(),
|
||||
sr_pubkey,
|
||||
PrivateRoute {
|
||||
public_key: private_route.public_key,
|
||||
hop_count: private_route.hop_count - 1,
|
||||
hops: pr_first_hop
|
||||
.next_hop
|
||||
.clone()
|
||||
.map(|rhd| PrivateRouteHops::Data(rhd))
|
||||
.unwrap_or(PrivateRouteHops::Empty),
|
||||
},
|
||||
)
|
||||
.await
|
||||
}
|
||||
|
||||
#[instrument(level = "trace", skip(self, msg), err)]
|
||||
pub(crate) async fn process_route(&self, msg: RPCMessage) -> Result<(), RPCError> {
|
||||
@@ -332,24 +360,11 @@ impl RPCProcessor {
|
||||
decode_private_route(&pr_reader)?
|
||||
};
|
||||
|
||||
// Get the next hop node ref
|
||||
let PrivateRouteHops::FirstHop(pr_first_hop) = private_route.hops else {
|
||||
return Err(RPCError::protocol("switching from safety route to private route requires first hop"));
|
||||
};
|
||||
|
||||
// Switching to private route from safety route
|
||||
self.process_route_private_route_hop(
|
||||
// Switching from full safety route to private route first hop
|
||||
self.process_private_route_first_hop(
|
||||
route.operation,
|
||||
pr_first_hop.node,
|
||||
route.safety_route.public_key,
|
||||
PrivateRoute {
|
||||
public_key: private_route.public_key,
|
||||
hop_count: private_route.hop_count - 1,
|
||||
hops: pr_first_hop
|
||||
.next_hop
|
||||
.map(|rhd| PrivateRouteHops::Data(rhd))
|
||||
.unwrap_or(PrivateRouteHops::Empty),
|
||||
},
|
||||
&private_route,
|
||||
)
|
||||
.await?;
|
||||
} else if blob_tag == 0 {
|
||||
@@ -361,6 +376,7 @@ impl RPCProcessor {
|
||||
decode_route_hop(&rh_reader)?
|
||||
};
|
||||
|
||||
// Continue the full safety route with another hop
|
||||
self.process_route_safety_route_hop(route, route_hop)
|
||||
.await?;
|
||||
} else {
|
||||
@@ -372,7 +388,13 @@ impl RPCProcessor {
|
||||
// See if we have a hop, if not, we are at the end of the private route
|
||||
match &private_route.hops {
|
||||
PrivateRouteHops::FirstHop(_) => {
|
||||
return Err(RPCError::protocol("should not have first hop here"));
|
||||
// Safety route was a stub, start with the beginning of the private route
|
||||
self.process_private_route_first_hop(
|
||||
route.operation,
|
||||
route.safety_route.public_key,
|
||||
private_route,
|
||||
)
|
||||
.await?;
|
||||
}
|
||||
PrivateRouteHops::Data(route_hop_data) => {
|
||||
// Decrypt the blob with DEC(nonce, DH(the PR's public key, this hop's secret)
|
||||
|
Reference in New Issue
Block a user