aboutsummaryrefslogtreecommitdiff
path: root/src/rust/external/external.rs
diff options
context:
space:
mode:
authorChelsea Holland Komlo <me@chelseakomlo.com>2017-09-27 19:48:07 +0000
committerNick Mathewson <nickm@torproject.org>2017-10-27 10:02:08 -0400
commitd1820c1516a31a149fc51a9e5126bf899e4c4e08 (patch)
treeea2ed5c2259f87ca078378eff4f78c9bf0aa50da /src/rust/external/external.rs
parent5418aa84eec9f08af7ab7b68cbc9145750ad0a1b (diff)
downloadtor-d1820c1516a31a149fc51a9e5126bf899e4c4e08.tar.gz
tor-d1820c1516a31a149fc51a9e5126bf899e4c4e08.zip
rust implementation of protover
Diffstat (limited to 'src/rust/external/external.rs')
-rw-r--r--src/rust/external/external.rs29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/rust/external/external.rs b/src/rust/external/external.rs
new file mode 100644
index 0000000000..0e8d1eb0d8
--- /dev/null
+++ b/src/rust/external/external.rs
@@ -0,0 +1,29 @@
+use libc::{c_char, c_int};
+use std::ffi::CString;
+
+extern "C" {
+ fn tor_version_as_new_as(
+ platform: *const c_char,
+ cutoff: *const c_char,
+ ) -> c_int;
+}
+
+/// Wrap calls to tor_version_as_new_as, defined in src/or/routerparse.c
+pub fn c_tor_version_as_new_as(platform: &str, cutoff: &str) -> bool {
+ // CHK: These functions should log a warning if an error occurs. This
+ // can be added when integration with tor's logger is added to rust
+ let c_platform = match CString::new(platform) {
+ Ok(n) => n,
+ Err(_) => return false,
+ };
+ let c_cutoff = match CString::new(cutoff) {
+ Ok(n) => n,
+ Err(_) => return false,
+ };
+
+ let result: c_int;
+ unsafe {
+ result = tor_version_as_new_as(c_platform.as_ptr(), c_cutoff.as_ptr());
+ result == 1
+ }
+}