123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- /* Copyright (c) 2016-2017, The Tor Project, Inc. */
- /* See LICENSE for licensing information */
- /*
- * \file protover_rust.c
- * \brief Provide a C wrapper for functions exposed in /src/rust/protover,
- * and safe translation/handling between the Rust/C boundary.
- */
- #include "or.h"
- #include "protover.h"
- #include "rust_types.h"
- #ifdef HAVE_RUST
- int rust_protover_all_supported(const char *s, char **missing);
- rust_str_ref_t rust_protover_compute_for_old_tor(const char *version);
- rust_str_ref_t rust_protover_compute_vote(const smartlist_t *proto_votes,
- int threshold);
- rust_str_ref_t rust_protover_get_supported_protocols(void);
- int rust_protocol_list_supports_protocol(const char *list, protocol_type_t tp,
- uint32_t version);
- int rust_protover_is_supported_here(protocol_type_t pr, uint32_t ver);
- /* Define for compatibility, used in main.c */
- void protover_free_all(void) {};
- /*
- * Wrap rust_protover_is_supported_here, located in /src/rust/protover
- */
- int
- protover_is_supported_here(protocol_type_t pr, uint32_t ver)
- {
- return rust_protover_is_supported_here(pr, ver);
- }
- /*
- * Wrap rust_protover_list_supports_protocol, located in /src/rust/protover
- */
- int
- protocol_list_supports_protocol(const char *list, protocol_type_t tp,
- uint32_t version)
- {
- return rust_protocol_list_supports_protocol(list, tp, version);
- }
- /*
- * Wrap rust_protover_get_supported_protocols, located in /src/rust/protover
- */
- const char *
- protover_get_supported_protocols(void)
- {
- rust_str_ref_t rust_protocols = rust_protover_get_supported_protocols();
- char *protocols = NULL;
- if (rust_protocols != NULL) {
- move_rust_str_to_c_and_free(rust_protocols, &protocols);
- }
- return protocols;
- }
- /*
- * Wrap rust_protover_compute_vote, located in /src/rust/protover
- */
- char *
- protover_compute_vote(const smartlist_t *proto_strings,
- int threshold)
- {
- rust_str_ref_t rust_protocols = rust_protover_compute_vote(proto_strings,
- threshold);
- char *protocols = NULL;
- if (rust_protocols != NULL) {
- move_rust_str_to_c_and_free(rust_protocols, &protocols);
- }
- return protocols;
- }
- /*
- * Wrap rust_protover_all_supported, located in /src/rust/protover
- */
- int
- protover_all_supported(const char *s, char **missing_out)
- {
- rust_str_ref_t missing_out_copy = NULL;
- int is_supported = rust_protover_all_supported(s, &missing_out_copy);
- if (!is_supported) {
- move_rust_str_to_c_and_free(missing_out_copy, missing_out);
- }
- return is_supported;
- }
- /*
- * Wrap rust_compute_for_old_tor, located in /src/rust/protover
- */
- const char *
- protover_compute_for_old_tor(const char *version)
- {
- rust_str_ref_t rust_protocols = rust_protover_compute_for_old_tor(version);
- char *protocols = NULL;
- if (rust_protocols != NULL) {
- move_rust_str_to_c_and_free(rust_protocols, &protocols);
- }
- return protocols;
- }
- #endif
|