mirror of
https://gitee.com/fantix/kloop.git
synced 2024-11-25 03:41:00 +00:00
Clean up Rust project
This commit is contained in:
parent
eca322da58
commit
a935db4858
5 changed files with 58 additions and 70 deletions
50
resolver/Cargo.lock
generated
50
resolver/Cargo.lock
generated
|
@ -39,9 +39,9 @@ checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "enum-as-inner"
|
name = "enum-as-inner"
|
||||||
version = "0.4.0"
|
version = "0.5.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "21cdad81446a7f7dc43f6a77409efeb9733d2fa65553efef6018ef257c959b73"
|
checksum = "432f044e9077ad6666f3446df0489a71ac3ed0336ea54edf6b85e00cd7562283"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"heck",
|
"heck",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
|
@ -237,6 +237,12 @@ version = "0.1.9"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
|
checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "once_cell"
|
||||||
|
version = "1.12.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7709cef83f0c1f58f666e746a08b21e0085f7440fa6a29cc194d68aac97a4225"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "parking_lot"
|
name = "parking_lot"
|
||||||
version = "0.12.0"
|
version = "0.12.0"
|
||||||
|
@ -446,10 +452,42 @@ version = "0.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
|
checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tracing"
|
||||||
|
version = "0.1.35"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a400e31aa60b9d44a52a8ee0343b5b18566b03a8321e0d321f695cf56e940160"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"pin-project-lite",
|
||||||
|
"tracing-attributes",
|
||||||
|
"tracing-core",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tracing-attributes"
|
||||||
|
version = "0.1.21"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cc6b8ad3567499f98a1db7a752b07a7c8c7c7c34c332ec00effb2b0027974b7c"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tracing-core"
|
||||||
|
version = "0.1.27"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7709595b8878a4965ce5e87ebf880a7d39c9afc6837721b21a5a816a8117d921"
|
||||||
|
dependencies = [
|
||||||
|
"once_cell",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "trust-dns-proto"
|
name = "trust-dns-proto"
|
||||||
version = "0.21.2"
|
version = "0.21.2"
|
||||||
source = "git+https://github.com/fantix/trust-dns?branch=0_21_2_patch#843c22f1d267660d816480d7168c17ee5467cda8"
|
source = "git+https://github.com/bluejekyll/trust-dns#170e3f7d7dfbc2b6c48318cb5c996a8cc6db77a1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
|
@ -461,29 +499,29 @@ dependencies = [
|
||||||
"idna",
|
"idna",
|
||||||
"ipnet",
|
"ipnet",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"log",
|
|
||||||
"rand",
|
"rand",
|
||||||
"smallvec",
|
"smallvec",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"tinyvec",
|
"tinyvec",
|
||||||
|
"tracing",
|
||||||
"url",
|
"url",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "trust-dns-resolver"
|
name = "trust-dns-resolver"
|
||||||
version = "0.21.2"
|
version = "0.21.2"
|
||||||
source = "git+https://github.com/fantix/trust-dns?branch=0_21_2_patch#843c22f1d267660d816480d7168c17ee5467cda8"
|
source = "git+https://github.com/bluejekyll/trust-dns#170e3f7d7dfbc2b6c48318cb5c996a8cc6db77a1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
"ipconfig",
|
"ipconfig",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"log",
|
|
||||||
"lru-cache",
|
"lru-cache",
|
||||||
"parking_lot",
|
"parking_lot",
|
||||||
"resolv-conf",
|
"resolv-conf",
|
||||||
"smallvec",
|
"smallvec",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
|
"tracing",
|
||||||
"trust-dns-proto",
|
"trust-dns-proto",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -11,8 +11,8 @@ crate-type = ["staticlib"]
|
||||||
libc = "0.2.124"
|
libc = "0.2.124"
|
||||||
log = "0.4.16"
|
log = "0.4.16"
|
||||||
resolv-conf = { version = "0.7.0", features = ["system"] }
|
resolv-conf = { version = "0.7.0", features = ["system"] }
|
||||||
trust-dns-proto = { git = "https://github.com/fantix/trust-dns", branch = "0_21_2_patch", default-features = false }
|
trust-dns-proto = { git = "https://github.com/bluejekyll/trust-dns", default-features = false }
|
||||||
trust-dns-resolver = { git = "https://github.com/fantix/trust-dns", branch = "0_21_2_patch", default-features = false, features = ["system-config"]}
|
trust-dns-resolver = { git = "https://github.com/bluejekyll/trust-dns", default-features = false, features = ["system-config"]}
|
||||||
futures-util = "0.3.21"
|
futures-util = "0.3.21"
|
||||||
futures-io = "0.3.5"
|
futures-io = "0.3.5"
|
||||||
futures-executor = "0.3.5"
|
futures-executor = "0.3.5"
|
||||||
|
|
|
@ -1,57 +0,0 @@
|
||||||
use std::future::Future;
|
|
||||||
use std::pin::Pin;
|
|
||||||
use std::task::{Context, Poll};
|
|
||||||
use futures_util::task::noop_waker_ref;
|
|
||||||
|
|
||||||
use libc;
|
|
||||||
|
|
||||||
pub type BoxFuture<'a, T> = Box<dyn Future<Output = T> + 'a>;
|
|
||||||
|
|
||||||
pub struct Poller<'a> {
|
|
||||||
ctx: Context<'a>,
|
|
||||||
fut: BoxFuture<'a, libc::c_int>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a> Poller<'a> {
|
|
||||||
pub fn new(fut: impl Future<Output = libc::c_int> + 'a) -> Self {
|
|
||||||
let waker = noop_waker_ref();
|
|
||||||
Poller {
|
|
||||||
ctx: Context::from_waker(waker),
|
|
||||||
fut: Box::new(fut),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn step(&mut self) -> Option<libc::c_int> {
|
|
||||||
let fut = unsafe { Pin::new_unchecked(self.fut.as_mut()) };
|
|
||||||
match fut.poll(&mut self.ctx) {
|
|
||||||
Poll::Ready(rv) => Some(rv),
|
|
||||||
Poll::Pending => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub struct OnceFuture {
|
|
||||||
seen: bool,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl OnceFuture {
|
|
||||||
pub fn new() -> Self {
|
|
||||||
Self { seen: false }
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Future for OnceFuture {
|
|
||||||
type Output = ();
|
|
||||||
|
|
||||||
fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
|
|
||||||
if self.seen {
|
|
||||||
println!("poll ready");
|
|
||||||
Poll::Ready(())
|
|
||||||
} else {
|
|
||||||
println!("poll pending");
|
|
||||||
self.get_mut().seen = true;
|
|
||||||
Poll::Pending
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -28,8 +28,6 @@ use trust_dns_resolver::{AsyncResolver, Hosts};
|
||||||
use crate::kloop::{resolve_done_cb, resolve_prep_addr, resolver_set, CResolve, CResolver};
|
use crate::kloop::{resolve_done_cb, resolve_prep_addr, resolver_set, CResolve, CResolver};
|
||||||
use crate::runtime::{KLoopHandle, KLoopRuntime};
|
use crate::runtime::{KLoopHandle, KLoopRuntime};
|
||||||
|
|
||||||
const DEFAULT_PORT: u16 = 53;
|
|
||||||
|
|
||||||
type KLoopConnection = GenericConnection;
|
type KLoopConnection = GenericConnection;
|
||||||
|
|
||||||
type KLoopConnectionProvider = GenericConnectionProvider<KLoopRuntime>;
|
type KLoopConnectionProvider = GenericConnectionProvider<KLoopRuntime>;
|
||||||
|
@ -56,7 +54,7 @@ impl KLoopResolver {
|
||||||
options.use_hosts_file = false;
|
options.use_hosts_file = false;
|
||||||
let conn_provider = GenericConnectionProvider::new(KLoopHandle);
|
let conn_provider = GenericConnectionProvider::new(KLoopHandle);
|
||||||
let mut resolver = AsyncResolver::new_with_conn(config, options, conn_provider).unwrap();
|
let mut resolver = AsyncResolver::new_with_conn(config, options, conn_provider).unwrap();
|
||||||
resolver.set_hosts(Some(Hosts::default().read_hosts_conf(hosts_conf)));
|
resolver.set_hosts(Some(Hosts::default().read_hosts_conf(hosts_conf)?));
|
||||||
let pool = LocalPool::new();
|
let pool = LocalPool::new();
|
||||||
let spawner = pool.spawner();
|
let spawner = pool.spawner();
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
|
@ -137,7 +135,7 @@ pub extern "C" fn resolver_init(
|
||||||
let resolv_conf =
|
let resolv_conf =
|
||||||
unsafe { std::slice::from_raw_parts(resolv_conf_data, resolv_conf_data_size) };
|
unsafe { std::slice::from_raw_parts(resolv_conf_data, resolv_conf_data_size) };
|
||||||
let hosts_conf = unsafe { std::slice::from_raw_parts(hosts_conf_data, hosts_conf_data_size) };
|
let hosts_conf = unsafe { std::slice::from_raw_parts(hosts_conf_data, hosts_conf_data_size) };
|
||||||
let mut resolver = match KLoopResolver::new(resolv_conf, hosts_conf, c_resolver) {
|
let resolver = match KLoopResolver::new(resolv_conf, hosts_conf, c_resolver) {
|
||||||
Ok(resolver) => resolver,
|
Ok(resolver) => resolver,
|
||||||
Err(e) => return 0,
|
Err(e) => return 0,
|
||||||
};
|
};
|
||||||
|
|
|
@ -23,7 +23,6 @@ use std::pin::Pin;
|
||||||
use std::task::{Context, Poll, Waker};
|
use std::task::{Context, Poll, Waker};
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use std::{io, mem};
|
use std::{io, mem};
|
||||||
use futures_util::future::Ready;
|
|
||||||
use trust_dns_proto::error::ProtoError;
|
use trust_dns_proto::error::ProtoError;
|
||||||
use trust_dns_proto::tcp::{Connect, DnsTcpStream};
|
use trust_dns_proto::tcp::{Connect, DnsTcpStream};
|
||||||
use trust_dns_proto::udp::UdpSocket;
|
use trust_dns_proto::udp::UdpSocket;
|
||||||
|
@ -107,6 +106,16 @@ pub struct KLoopUdp {
|
||||||
impl UdpSocket for KLoopUdp {
|
impl UdpSocket for KLoopUdp {
|
||||||
type Time = KLoopTimer;
|
type Time = KLoopTimer;
|
||||||
|
|
||||||
|
async fn connect(addr: SocketAddr) -> io::Result<Self> {
|
||||||
|
println!("TODO: KLoopUdp: connect({})", addr);
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn connect_with_bind(addr: SocketAddr, bind_addr: SocketAddr) -> io::Result<Self> {
|
||||||
|
println!("TODO: KLoopUdp: connect_with_bind({}, {})", addr, bind_addr);
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
|
||||||
async fn bind(addr: SocketAddr) -> io::Result<Self> {
|
async fn bind(addr: SocketAddr) -> io::Result<Self> {
|
||||||
let (addr_ptr, addr_len) = socket_addr_as_ptr(addr);
|
let (addr_ptr, addr_len) = socket_addr_as_ptr(addr);
|
||||||
let fd = unsafe { kloop::udp_bind(addr_ptr, addr_len) };
|
let fd = unsafe { kloop::udp_bind(addr_ptr, addr_len) };
|
||||||
|
|
Loading…
Reference in a new issue