114 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C
		
	
	
	
| /*
 | |
|  * Copyright (C) 2021 The Android Open Source Project
 | |
|  *
 | |
|  * Licensed under the Apache License, Version 2.0 (the "License");
 | |
|  * you may not use this file except in compliance with the License.
 | |
|  * You may obtain a copy of the License at
 | |
|  *
 | |
|  *      http://www.apache.org/licenses/LICENSE-2.0
 | |
|  *
 | |
|  * Unless required by applicable law or agreed to in writing, software
 | |
|  * distributed under the License is distributed on an "AS IS" BASIS,
 | |
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
|  * See the License for the specific language governing permissions and
 | |
|  * limitations under the License.
 | |
|  */
 | |
| 
 | |
| // This file can be autogenerated by the following command, but the generated file
 | |
| // may not pass clang-format check.
 | |
| //   cbindgen --config cbindgen.toml doh/doh.rs -o doh.h
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <stdint.h>
 | |
| #include <sys/types.h>
 | |
| 
 | |
| /// The return code of doh_query means that there is no answer.
 | |
| static const ssize_t DOH_RESULT_INTERNAL_ERROR = -1;
 | |
| 
 | |
| /// The return code of doh_query means that query can't be sent.
 | |
| static const ssize_t DOH_RESULT_CAN_NOT_SEND = -2;
 | |
| 
 | |
| /// The return code of doh_query to indicate that the query timed out.
 | |
| static const ssize_t DOH_RESULT_TIMEOUT = -255;
 | |
| 
 | |
| /// The error log level.
 | |
| static const uint32_t DOH_LOG_LEVEL_ERROR = 0;
 | |
| 
 | |
| /// The warning log level.
 | |
| static const uint32_t DOH_LOG_LEVEL_WARN = 1;
 | |
| 
 | |
| /// The info log level.
 | |
| static const uint32_t DOH_LOG_LEVEL_INFO = 2;
 | |
| 
 | |
| /// The debug log level.
 | |
| static const uint32_t DOH_LOG_LEVEL_DEBUG = 3;
 | |
| 
 | |
| /// The trace log level.
 | |
| static const uint32_t DOH_LOG_LEVEL_TRACE = 4;
 | |
| 
 | |
| /// Context for a running DoH engine.
 | |
| struct DohDispatcher;
 | |
| 
 | |
| struct FeatureFlags {
 | |
|     uint64_t probe_timeout_ms;
 | |
|     uint64_t idle_timeout_ms;
 | |
|     bool use_session_resumption;
 | |
| };
 | |
| 
 | |
| using ValidationCallback = void (*)(uint32_t net_id, bool success, const char* ip_addr,
 | |
|                                     const char* host);
 | |
| 
 | |
| using TagSocketCallback = void (*)(int32_t sock);
 | |
| 
 | |
| extern "C" {
 | |
| 
 | |
| /// Performs static initialization for android logger.
 | |
| /// If an invalid level is passed, defaults to logging errors only.
 | |
| /// If called more than once, it will have no effect on subsequent calls.
 | |
| void doh_init_logger(uint32_t level);
 | |
| 
 | |
| /// Set the log level.
 | |
| /// If an invalid level is passed, defaults to logging errors only.
 | |
| void doh_set_log_level(uint32_t level);
 | |
| 
 | |
| /// Performs the initialization for the DoH engine.
 | |
| /// Creates and returns a DoH engine instance.
 | |
| DohDispatcher* doh_dispatcher_new(ValidationCallback validation_fn,
 | |
|                                   TagSocketCallback tag_socket_fn);
 | |
| 
 | |
| /// Deletes a DoH engine created by doh_dispatcher_new().
 | |
| /// # Safety
 | |
| /// `doh` must be a non-null pointer previously created by `doh_dispatcher_new()`
 | |
| /// and not yet deleted by `doh_dispatcher_delete()`.
 | |
| void doh_dispatcher_delete(DohDispatcher* doh);
 | |
| 
 | |
| /// Probes and stores the DoH server with the given configurations.
 | |
| /// Use the negative errno-style codes as the return value to represent the result.
 | |
| /// # Safety
 | |
| /// `doh` must be a non-null pointer previously created by `doh_dispatcher_new()`
 | |
| /// and not yet deleted by `doh_dispatcher_delete()`.
 | |
| /// `url`, `domain`, `ip_addr`, `cert_path` are null terminated strings.
 | |
| int32_t doh_net_new(DohDispatcher* doh, uint32_t net_id, const char* url, const char* domain,
 | |
|                     const char* ip_addr, uint32_t sk_mark, const char* cert_path,
 | |
|                     const FeatureFlags* flags);
 | |
| 
 | |
| /// Sends a DNS query via the network associated to the given |net_id| and waits for the response.
 | |
| /// The return code should be either one of the public constant RESULT_* to indicate the error or
 | |
| /// the size of the answer.
 | |
| /// # Safety
 | |
| /// `doh` must be a non-null pointer previously created by `doh_dispatcher_new()`
 | |
| /// and not yet deleted by `doh_dispatcher_delete()`.
 | |
| /// `dns_query` must point to a buffer at least `dns_query_len` in size.
 | |
| /// `response` must point to a buffer at least `response_len` in size.
 | |
| ssize_t doh_query(DohDispatcher* doh, uint32_t net_id, uint8_t* dns_query, size_t dns_query_len,
 | |
|                   uint8_t* response, size_t response_len, uint64_t timeout_ms);
 | |
| 
 | |
| /// Clears the DoH servers associated with the given |netid|.
 | |
| /// # Safety
 | |
| /// `doh` must be a non-null pointer previously created by `doh_dispatcher_new()`
 | |
| /// and not yet deleted by `doh_dispatcher_delete()`.
 | |
| void doh_net_delete(DohDispatcher* doh, uint32_t net_id);
 | |
| 
 | |
| }  // extern "C"
 |