1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#![deny(missing_docs)]
#![recursion_limit = "1024"]
extern crate backtrace;
#[macro_use]
extern crate error_chain;
extern crate chrono;
extern crate data_encoding;
#[macro_use]
extern crate futures;
#[macro_use]
extern crate lazy_static;
#[macro_use]
extern crate log;
#[cfg(feature = "native-tls")]
extern crate native_tls;
#[cfg(feature = "openssl")]
extern crate openssl;
extern crate rand;
#[cfg(feature = "ring")]
extern crate ring;
extern crate rustc_serialize;
extern crate time;
extern crate tokio_io;
#[macro_use]
extern crate tokio_core;
#[cfg(feature = "tokio-tls")]
extern crate tokio_tls;
#[cfg(feature = "tokio-openssl")]
extern crate tokio_openssl;
#[cfg(feature = "ring")]
extern crate untrusted;
pub mod client;
pub mod error;
pub mod logger;
pub mod op;
pub mod rr;
pub mod tcp;
#[cfg(all(feature = "tls", feature = "openssl"))]
pub mod tls;
pub mod udp;
pub mod serialize;
#[cfg(test)]
mod tests;
use std::io;
use std::net::SocketAddr;
use futures::sync::mpsc::UnboundedSender;
use futures::Stream;
use op::Message;
use client::ClientStreamHandle;
pub type BufStream = Stream<Item = (Vec<u8>, SocketAddr), Error = io::Error>;
pub type BufStreamHandle = UnboundedSender<(Vec<u8>, SocketAddr)>;
pub type MessageStream = Stream<Item = Message, Error = io::Error>;
pub type MessageStreamHandle = UnboundedSender<Message>;
pub struct BufClientStreamHandle {
name_server: SocketAddr,
sender: BufStreamHandle,
}
impl BufClientStreamHandle {
pub fn new(name_server: SocketAddr, sender: BufStreamHandle) -> Self {
BufClientStreamHandle {
name_server: name_server,
sender: sender,
}
}
}
impl ClientStreamHandle for BufClientStreamHandle {
fn send(&mut self, buffer: Vec<u8>) -> io::Result<()> {
let name_server: SocketAddr = self.name_server;
let sender: &mut _ = &mut self.sender;
sender
.send((buffer, name_server))
.map_err(|_| io::Error::new(io::ErrorKind::Other, "unknown"))
}
}
include!(concat!(env!("OUT_DIR"), "/version.rs"));
#[test]
fn enable_logging_for_tests() {
use log::LogLevel;
logger::TrustDnsLogger::enable_logging(LogLevel::Debug);
}