Skip to content

Commit

Permalink
Merge pull request #274 from betrusted-io/xous-names-tryconnect
Browse files Browse the repository at this point in the history
Add TryConnect call to xous-names
  • Loading branch information
bunnie authored Nov 7, 2022
2 parents 1bc39cd + 3ca323f commit 28f42ba
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 4 deletions.
28 changes: 28 additions & 0 deletions api/xous-api-names/src/api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,34 @@ pub enum Opcode {
/// }
/// ```
BlockingConnect = 6,

/// Connect to a Server, returning the connection ID or an authentication request if
/// it exists, and returning ServerNotFound if it does not exist.
///
/// # Message Types
///
/// * MutableLend
///
/// # Arguments
///
/// The memory being pointed to should be a &str, and the length of the string should
/// be specified in the `valid` field.
///
/// # Return Values
///
/// Memory is overwritten to contain a return value. This return value can be defined
/// as the following enum:
///
/// ```rust
/// #[repr(C)]
/// #[non_exhaustive]
/// enum ConnectResult {
/// Success(xous::CID /* connection ID */, [u32; 4] /* Disconnection token */),
/// Error(u32 /* error code */),
/// Unhandled, /* Catchall for future Results */
/// }
/// ```
TryConnect = 7,
}

#[derive(Debug, rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)]
Expand Down
15 changes: 11 additions & 4 deletions services/xous-names/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ enum ConnectError {

/// The message was not a mutable memory message
InvalidMessageType = 4,

/// The server does not currently exist, and a blocking request was made
ServerNotFound = 5,
}

#[derive(PartialEq)]
Expand Down Expand Up @@ -464,7 +467,7 @@ fn main() -> ! {
xous::return_scalar(msg.sender, 0).unwrap();
}
}),
Some(api::Opcode::BlockingConnect) => {
Some(api::Opcode::BlockingConnect) | Some(api::Opcode::TryConnect) => {
if !msg.body.is_blocking() {
continue;
}
Expand All @@ -479,9 +482,13 @@ fn main() -> ! {
respond_connect_success(msg, cid, disc)
}
Ok(ConnectSuccess::Wait) => {
// Push waiting connections here, which will prevent it from getting
// dropped and responded to.
waiting_connections.push(msg);
if msg.body.id() == api::Opcode::TryConnect as usize {
respond_connect_error(msg, ConnectError::ServerNotFound);
} else {
// Push waiting connections here, which will prevent it from getting
// dropped and responded to.
waiting_connections.push(msg);
}
}
}
}
Expand Down

0 comments on commit 28f42ba

Please sign in to comment.