Skip to content

Commit

Permalink
Add support for foreign function callback.
Browse files Browse the repository at this point in the history
Signed-off-by: Caio Ramos Casimiro <[email protected]>
  • Loading branch information
casimiro committed Dec 2, 2024
1 parent 1ce09fd commit d620329
Show file tree
Hide file tree
Showing 3 changed files with 40 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 @@ -554,6 +554,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)
}
}
}

#[no_mangle]
Expand Down Expand Up @@ -722,3 +743,14 @@ pub extern "C" fn proxy_on_grpc_receive_trailing_metadata(
pub extern "C" fn proxy_on_grpc_close(_context_id: u32, token_id: u32, status_code: u32) {
DISPATCHER.with(|dispatcher| dispatcher.on_grpc_close(token_id, status_code))
}

#[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)
})
}
7 changes: 7 additions & 0 deletions src/traits.rs
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,13 @@ pub trait Context {
hostcalls::get_grpc_status().unwrap()
}

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

fn call_foreign_function(
&self,
function_name: &str,
Expand Down
1 change: 1 addition & 0 deletions src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ pub enum BufferType {
GrpcReceiveBuffer = 5,
VmConfiguration = 6,
PluginConfiguration = 7,
CallData = 8,
}

#[repr(u32)]
Expand Down

0 comments on commit d620329

Please sign in to comment.