diff options
author | Isis Lovecruft <isis@torproject.org> | 2018-03-21 02:52:04 +0000 |
---|---|---|
committer | Isis Lovecruft <isis@torproject.org> | 2018-04-02 19:34:26 +0000 |
commit | 63eeda89ea11bf719ec6fddc7619994cc7f654ca (patch) | |
tree | c5e66e04afcfc23c84b6405635cbcbb217fd57bf /src/rust/protover/ffi.rs | |
parent | c7bcca0233d1d4c9805f78da5e7186be2c1bcdca (diff) | |
download | tor-63eeda89ea11bf719ec6fddc7619994cc7f654ca.tar.gz tor-63eeda89ea11bf719ec6fddc7619994cc7f654ca.zip |
rust: Refactor Rust impl of protover_list_supports_protocol().
This includes a subtle difference in behaviour, as in 4258f1e18, where we return
(matching the C impl's return behaviour) earlier than before if parsing failed,
saving us computation in parsing the versions into a
protover::protoset::ProtoSet.
* REFACTOR `protover::ffi::protover_list_supports_protocol()` to use new types
and methods.
Diffstat (limited to 'src/rust/protover/ffi.rs')
-rw-r--r-- | src/rust/protover/ffi.rs | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/rust/protover/ffi.rs b/src/rust/protover/ffi.rs index c176968032..d9365bdd76 100644 --- a/src/rust/protover/ffi.rs +++ b/src/rust/protover/ffi.rs @@ -101,16 +101,18 @@ pub extern "C" fn protocol_list_supports_protocol( Ok(n) => n, Err(_) => return 1, }; - - let protocol = match translate_to_rust(c_protocol) { - Ok(n) => n, + let proto_entry: UnvalidatedProtoEntry = match protocol_list.parse() { + Ok(n) => n, Err(_) => return 0, }; - - let is_supported = - protover_string_supports_protocol(protocol_list, protocol, version); - - return if is_supported { 1 } else { 0 }; + let protocol: UnknownProtocol = match translate_to_rust(c_protocol) { + Ok(n) => n.into(), + Err(_) => return 0, + }; + match proto_entry.supports_protocol(&protocol, &version) { + false => return 0, + true => return 1, + } } /// Provide an interface for C to translate arguments and return types for |