Skip to content

Commit

Permalink
Add support for foreign function callback.
Browse files Browse the repository at this point in the history
  • Loading branch information
casimiro committed Nov 14, 2024
1 parent 6d88ed5 commit 1cf5c4e
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 0 deletions.
32 changes: 32 additions & 0 deletions src/dispatcher.rs
Original file line number Diff line number Diff line change
Expand Up @@ -427,6 +427,27 @@ impl Dispatcher {
}
}

fn on_foreign_function(
&self,
context_id: u32,
function_id: u32,
arugments_size: usize,
) {
if let Some(http_stream) = self.http_streams.borrow_mut().get_mut(&context_id) {
self.active_id.set(context_id);
hostcalls::set_effective_context(context_id).unwrap();
http_stream.on_foreign_function(function_id, arugments_size)
} else if let Some(stream) = self.streams.borrow_mut().get_mut(&context_id) {
self.active_id.set(context_id);
hostcalls::set_effective_context(context_id).unwrap();
stream.on_foreign_function(function_id, arugments_size)
} else if let Some(root) = self.roots.borrow_mut().get_mut(&context_id) {
self.active_id.set(context_id);
hostcalls::set_effective_context(context_id).unwrap();
root.on_foreign_function(function_id, arugments_size)
}
}

fn on_grpc_receive_initial_metadata(&self, token_id: u32, headers: u32) {
let context_id = match self.grpc_streams.borrow_mut().get(&token_id) {
Some(id) => *id,
Expand Down Expand Up @@ -695,6 +716,17 @@ pub extern "C" fn proxy_on_http_call_response(
})
}

#[no_mangle]
pub extern "C" fn proxy_on_foreign_function(
context_id: u32,
function_id: u32,
arguments_size: usize,
) {
DISPATCHER.with(|dispatcher| {
dispatcher.on_foreign_function(context_id, function_id, arguments_size)
})
}

#[no_mangle]
pub extern "C" fn proxy_on_grpc_receive_initial_metadata(
_context_id: u32,
Expand Down
7 changes: 7 additions & 0 deletions src/traits.rs
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,13 @@ pub trait Context {
) {
}

fn on_foreign_function(
&mut self,
_function_id: u32,
_arguments_size: usize,
) {
}

fn get_http_call_response_headers(&self) -> Vec<(String, String)> {
hostcalls::get_map(MapType::HttpCallResponseHeaders).unwrap()
}
Expand Down

0 comments on commit 1cf5c4e

Please sign in to comment.