// This file is autogenerated by: // cbindgen --config cbindgen.toml src/lib.rs -o include/lib.rs.h // Don't modify manually. #pragma once /* Generated with cbindgen:0.24.2 */ #include #include namespace test { namespace rust { constexpr static const uintptr_t DNS_HEADER_SIZE = 12; constexpr static const uintptr_t MAX_UDP_PAYLOAD_SIZE = 1350; constexpr static const uintptr_t CONN_ID_LEN = 8; /// Default value for max_idle_timeout transport parameter. constexpr static const uint64_t QUICHE_IDLE_TIMEOUT_MS = 10000; /// Default value for initial_max_streams_bidi transport parameter. constexpr static const uint64_t MAX_STREAMS_BIDI = 100; /// Frontend object. struct DohFrontend; struct Stats { /// The number of accumulated DoH queries that are received. uint32_t queries_received; /// The number of accumulated QUIC connections accepted. uint32_t connections_accepted; /// The number of QUIC connections alive. uint32_t alive_connections; /// The number of QUIC connections using session resumption. uint32_t resumed_connections; /// The number of QUIC connections that received early data. uint32_t early_data_connections; }; extern "C" { /// Creates a DohFrontend object by the given IP addresss and ports. Returns the pointer of /// the object if the creation succeeds; otherwise, returns a null pointer. /// /// # Safety /// /// The parameters `addr`, `port`, `backend_addr`, and `backend_port` must all point to null /// terminated UTF-8 encoded strings. DohFrontend* frontend_new(const char* addr, const char* port, const char* backend_addr, const char* backend_port); /// Starts the `DohFrontend` worker thread. Returns true if the worker thread is spawned /// successfully; otherwise, it returns false. bool frontend_start(DohFrontend* doh); /// Stops the `DohFrontend` worker thread. bool frontend_stop(DohFrontend* doh); /// Deletes the `DohFrontend` created from `frontend_new`. /// If the caller has called `frontend_start` to start `DohFrontend`, it has to call /// call `frontend_stop` to stop the worker thread before deleting the object. /// /// # Safety /// /// The DohFrontend is not set to null pointer, caller needs to do it on its own. void frontend_delete(DohFrontend* doh); /// Sets server certificate to `DohFrontend`. /// /// # Safety /// /// The given certificate must be a null-terminated UTF-8 encoded string. bool frontend_set_certificate(DohFrontend* doh, const char* certificate); /// Sets server private key to `DohFrontend`. /// /// # Safety /// /// The given private key must be a null-terminated UTF-8 encoded string. bool frontend_set_private_key(DohFrontend* doh, const char* private_key); /// Configures the `DohFrontend` not to process DoH queries until a given number of DoH queries /// are received. This function works even in the middle of the worker thread. bool frontend_set_delay_queries(DohFrontend* doh, int32_t count); /// Configures the `DohFrontend` to use the given value for max_idle_timeout transport parameter. bool frontend_set_max_idle_timeout(DohFrontend* doh, uint64_t value); /// Configures the `DohFrontend` to use the given value for these transport parameters. /// - initial_max_data /// - initial_max_stream_data_bidi_local /// - initial_max_stream_data_bidi_remote /// - initial_max_stream_data_uni bool frontend_set_max_buffer_size(DohFrontend* doh, uint64_t value); /// Configures the `DohFrontend` to use the given value for initial_max_streams_bidi transport /// parameter. bool frontend_set_max_streams_bidi(DohFrontend* doh, uint64_t value); /// Sets the `DohFrontend` to block or unblock sending any data. bool frontend_block_sending(DohFrontend* doh, bool block); /// If this function is called, the `DohFrontend` will send RESET_STREAM frame as a response /// instead of a DoH answer on the stream |stream_id|. This will make the client fail to receive /// this DoH answer. bool frontend_set_reset_stream_id(DohFrontend* doh, uint64_t stream_id); /// Gets the statistics of the `DohFrontend` and writes the result to |out|. bool frontend_stats(DohFrontend* doh, Stats* out); /// Resets `queries_received` field of `Stats` owned by the `DohFrontend`. bool frontend_stats_clear_queries(const DohFrontend* doh); /// Enable Rust debug logging. void init_android_logger(); } // extern "C" } // namespace rust } // namespace test