diff options
| author | Emīls <emils@mullvad.net> | 2018-06-18 14:55:44 +0100 |
|---|---|---|
| committer | Emīls Piņķis <emils@mullvad.net> | 2018-06-21 16:02:50 +0100 |
| commit | f29f210ebeaaa62e07dbbf68b6407e92f0adcb6c (patch) | |
| tree | 3caba6c65887867fddd17f731ab4939eb0e105b5 /talpid-core | |
| parent | cf14b4c77e7c43a75062e217fa56c449ada016e5 (diff) | |
| download | mullvadvpn-f29f210ebeaaa62e07dbbf68b6407e92f0adcb6c.tar.xz mullvadvpn-f29f210ebeaaa62e07dbbf68b6407e92f0adcb6c.zip | |
Add separate ffi module for Windows in talpid-core
Diffstat (limited to 'talpid-core')
| -rw-r--r-- | talpid-core/src/firewall/windows/ffi.rs | 45 | ||||
| -rw-r--r-- | talpid-core/src/firewall/windows/mod.rs | 3 |
2 files changed, 48 insertions, 0 deletions
diff --git a/talpid-core/src/firewall/windows/ffi.rs b/talpid-core/src/firewall/windows/ffi.rs new file mode 100644 index 0000000000..2cd6c34836 --- /dev/null +++ b/talpid-core/src/firewall/windows/ffi.rs @@ -0,0 +1,45 @@ +extern crate libc; + +use std::os::raw::c_char; +use std::ptr; + +pub type ErrorSink = extern "system" fn(msg: *const c_char, ctx: *mut libc::c_void); + +pub extern "system" fn error_sink(msg: *const c_char, _ctx: *mut libc::c_void) { + use std::ffi::CStr; + if msg == ptr::null() { + error!("Log message from FFI boundary is NULL"); + } else { + error!("{}", unsafe { CStr::from_ptr(msg).to_string_lossy() }); + } +} + +#[macro_export] +macro_rules! ffi_error { + ($result:ident, $error:expr) => { + pub mod $result { + use super::*; + + #[repr(C)] + #[derive(Debug)] + pub struct FFIResult { + success: bool, + } + + impl FFIResult { + pub fn into_result(self) -> Result<()> { + match self.success { + true => Ok(()), + false => Err($error), + } + } + } + + impl Into<Result<()>> for FFIResult { + fn into(self) -> Result<()> { + self.into_result() + } + } + } + }; +} diff --git a/talpid-core/src/firewall/windows/mod.rs b/talpid-core/src/firewall/windows/mod.rs index f85dc090ca..544843b2f7 100644 --- a/talpid-core/src/firewall/windows/mod.rs +++ b/talpid-core/src/firewall/windows/mod.rs @@ -9,6 +9,9 @@ use talpid_types::net::Endpoint; use self::widestring::WideCString; +#[macro_use] +mod ffi; + error_chain!{ errors{ #[doc = "Windows firewall module error"] |
