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
use std::io::Write;
use core::time;
use crate::utils;
use crate::header;
pub type DefaultTimer = async_timer::oneshot::Timer;
#[cfg(feature = "rustls-on")]
pub type DefaultConnector = crate::connector::rustls::HttpsConnector;
#[cfg(not(feature = "rustls-on"))]
pub type DefaultConnector = crate::connector::HttpConnector;
pub trait Config {
type Connector: hyper::service::Service<hyper::Uri> + Default + Clone + Send + Sync;
type Timer: async_timer::oneshot::Oneshot;
#[inline]
fn decompress() -> bool {
true
}
#[inline]
fn timeout() -> time::Duration {
time::Duration::from_secs(30)
}
fn default_user_agent(request: &mut super::request::Request) {
if !request.headers().contains_key(header::USER_AGENT) {
request.headers_mut().insert(header::USER_AGENT, header::HeaderValue::from_static(concat!("Yukikaze/", env!("CARGO_PKG_VERSION"))));
}
}
#[inline]
fn default_headers(request: &mut super::request::Request) {
Self::default_user_agent(request);
if !request.headers().contains_key(header::HOST) {
let host = request.uri().host().and_then(|host| match request.uri().port().map(|port| port.as_u16()) {
None | Some(80) | Some(443) => header::HeaderValue::from_str(host).ok(),
Some(port) => {
let mut buffer = utils::BytesWriter::with_capacity(host.len() + 5);
let _ = write!(&mut buffer, "{}:{}", host, port);
http::header::HeaderValue::from_maybe_shared(buffer.freeze()).ok()
},
});
if let Some(host) = host {
request.headers_mut().insert(header::HOST, host);
}
}
}
#[inline]
fn max_redirect_num() -> usize {
8
}
#[inline]
fn config_hyper(builder: &mut hyper::client::Builder) -> &mut hyper::client::Builder {
builder
}
}
pub struct DefaultCfg;
impl Config for DefaultCfg {
type Connector = DefaultConnector;
type Timer = DefaultTimer;
}