wreq-rb 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. checksums.yaml +4 -4
  2. data/Cargo.lock +1922 -397
  3. data/LICENSE +203 -0
  4. data/README.md +19 -15
  5. data/ext/wreq_rb/Cargo.toml +4 -6
  6. data/ext/wreq_rb/src/client.rs +41 -48
  7. data/lib/wreq-rb/version.rb +1 -1
  8. data/patches/0001-add-transfer-size-tracking.patch +76 -67
  9. data/vendor/wreq/Cargo.toml +119 -71
  10. data/vendor/wreq/README.md +25 -20
  11. data/vendor/wreq/bench/http1.rs +25 -0
  12. data/vendor/wreq/bench/http1_over_tls.rs +25 -0
  13. data/vendor/wreq/bench/http2.rs +25 -0
  14. data/vendor/wreq/bench/http2_over_tls.rs +25 -0
  15. data/vendor/wreq/bench/support/bench.rs +91 -0
  16. data/vendor/wreq/bench/support/client.rs +217 -0
  17. data/vendor/wreq/bench/support/server.rs +188 -0
  18. data/vendor/wreq/bench/support.rs +56 -0
  19. data/vendor/wreq/examples/cert_store.rs +4 -4
  20. data/vendor/wreq/examples/{emulation.rs → emulate.rs} +2 -2
  21. data/vendor/wreq/examples/http2_websocket.rs +2 -2
  22. data/vendor/wreq/examples/keylog.rs +3 -3
  23. data/vendor/wreq/examples/{request_with_emulation.rs → request_with_emulate.rs} +2 -2
  24. data/vendor/wreq/examples/rt.rs +23 -0
  25. data/vendor/wreq/src/client/body.rs +23 -61
  26. data/vendor/wreq/src/client/emulate.rs +119 -0
  27. data/vendor/wreq/src/client/{http/future.rs → future.rs} +11 -32
  28. data/vendor/wreq/src/client/{http → layer}/client/pool.rs +66 -61
  29. data/vendor/wreq/src/client/{http → layer}/client.rs +416 -270
  30. data/vendor/wreq/src/client/layer/config.rs +27 -6
  31. data/vendor/wreq/src/client/layer/decoder.rs +9 -4
  32. data/vendor/wreq/src/client/layer/redirect/future.rs +6 -3
  33. data/vendor/wreq/src/client/layer/redirect.rs +4 -5
  34. data/vendor/wreq/src/client/layer/retry.rs +8 -5
  35. data/vendor/wreq/src/client/layer/timeout/body.rs +15 -6
  36. data/vendor/wreq/src/client/layer/timeout/future.rs +23 -18
  37. data/vendor/wreq/src/client/layer/timeout.rs +24 -74
  38. data/vendor/wreq/src/client/layer.rs +1 -2
  39. data/vendor/wreq/src/client/multipart.rs +137 -154
  40. data/vendor/wreq/src/client/request.rs +202 -118
  41. data/vendor/wreq/src/client/response.rs +46 -45
  42. data/vendor/wreq/src/client/upgrade.rs +15 -0
  43. data/vendor/wreq/src/client/ws.rs +73 -25
  44. data/vendor/wreq/src/client.rs +1655 -17
  45. data/vendor/wreq/src/config.rs +11 -11
  46. data/vendor/wreq/src/{client/conn → conn}/connector.rs +139 -137
  47. data/vendor/wreq/src/conn/descriptor.rs +143 -0
  48. data/vendor/wreq/src/conn/http.rs +484 -0
  49. data/vendor/wreq/src/conn/net/io.rs +75 -0
  50. data/vendor/wreq/src/conn/net/tcp/compio.rs +71 -0
  51. data/vendor/wreq/src/conn/net/tcp/tokio.rs +57 -0
  52. data/vendor/wreq/src/conn/net/tcp.rs +561 -0
  53. data/vendor/wreq/src/conn/net/uds/compio.rs +60 -0
  54. data/vendor/wreq/src/{client/conn/uds.rs → conn/net/uds/tokio.rs} +18 -12
  55. data/vendor/wreq/src/conn/net/uds.rs +11 -0
  56. data/vendor/wreq/src/conn/net.rs +130 -0
  57. data/vendor/wreq/src/{client/conn → conn}/proxy/socks.rs +2 -9
  58. data/vendor/wreq/src/{client/conn → conn}/proxy/tunnel.rs +21 -56
  59. data/vendor/wreq/src/conn/tls_info.rs +47 -0
  60. data/vendor/wreq/src/{client/conn.rs → conn.rs} +202 -54
  61. data/vendor/wreq/src/cookie.rs +302 -142
  62. data/vendor/wreq/src/dns/gai/compio.rs +77 -0
  63. data/vendor/wreq/src/dns/gai/tokio.rs +90 -0
  64. data/vendor/wreq/src/dns/gai.rs +14 -164
  65. data/vendor/wreq/src/dns/hickory.rs +16 -23
  66. data/vendor/wreq/src/dns/resolve.rs +7 -41
  67. data/vendor/wreq/src/dns.rs +90 -7
  68. data/vendor/wreq/src/error.rs +57 -31
  69. data/vendor/wreq/src/ext.rs +25 -0
  70. data/vendor/wreq/src/group.rs +211 -0
  71. data/vendor/wreq/src/header.rs +100 -112
  72. data/vendor/wreq/src/lib.rs +124 -73
  73. data/vendor/wreq/src/proxy.rs +6 -20
  74. data/vendor/wreq/src/redirect.rs +1 -1
  75. data/vendor/wreq/src/rt.rs +208 -0
  76. data/vendor/wreq/src/sync.rs +97 -98
  77. data/vendor/wreq/src/tls/compress.rs +124 -0
  78. data/vendor/wreq/src/tls/conn/ext.rs +54 -45
  79. data/vendor/wreq/src/tls/conn/service.rs +14 -18
  80. data/vendor/wreq/src/tls/conn.rs +169 -241
  81. data/vendor/wreq/src/tls/keylog.rs +68 -5
  82. data/vendor/wreq/src/tls/session.rs +205 -0
  83. data/vendor/wreq/src/tls/{x509 → trust}/identity.rs +4 -21
  84. data/vendor/wreq/src/tls/{x509/parser.rs → trust/parse.rs} +1 -1
  85. data/vendor/wreq/src/tls/{x509 → trust}/store.rs +42 -81
  86. data/vendor/wreq/src/tls/{x509.rs → trust.rs} +8 -2
  87. data/vendor/wreq/src/tls.rs +489 -25
  88. data/vendor/wreq/src/trace.rs +0 -12
  89. data/vendor/wreq/src/util.rs +1 -1
  90. data/vendor/wreq/tests/badssl.rs +10 -10
  91. data/vendor/wreq/tests/client.rs +3 -9
  92. data/vendor/wreq/tests/cookie.rs +6 -8
  93. data/vendor/wreq/tests/{emulation.rs → emulate.rs} +130 -22
  94. data/vendor/wreq/tests/multipart.rs +43 -1
  95. data/vendor/wreq/tests/proxy.rs +1 -1
  96. data/vendor/wreq/tests/support/layer.rs +1 -0
  97. metadata +49 -71
  98. data/patches/0002-add-cancel-connections.patch +0 -181
  99. data/vendor/wreq/src/client/conn/conn.rs +0 -231
  100. data/vendor/wreq/src/client/conn/http.rs +0 -1023
  101. data/vendor/wreq/src/client/conn/tls_info.rs +0 -98
  102. data/vendor/wreq/src/client/core/body/incoming.rs +0 -485
  103. data/vendor/wreq/src/client/core/body/length.rs +0 -118
  104. data/vendor/wreq/src/client/core/body.rs +0 -34
  105. data/vendor/wreq/src/client/core/common/buf.rs +0 -149
  106. data/vendor/wreq/src/client/core/common/rewind.rs +0 -141
  107. data/vendor/wreq/src/client/core/common/watch.rs +0 -76
  108. data/vendor/wreq/src/client/core/common.rs +0 -3
  109. data/vendor/wreq/src/client/core/conn/http1.rs +0 -342
  110. data/vendor/wreq/src/client/core/conn/http2.rs +0 -307
  111. data/vendor/wreq/src/client/core/conn.rs +0 -11
  112. data/vendor/wreq/src/client/core/dispatch.rs +0 -299
  113. data/vendor/wreq/src/client/core/error.rs +0 -435
  114. data/vendor/wreq/src/client/core/ext.rs +0 -201
  115. data/vendor/wreq/src/client/core/http1.rs +0 -178
  116. data/vendor/wreq/src/client/core/http2.rs +0 -483
  117. data/vendor/wreq/src/client/core/proto/h1/conn.rs +0 -988
  118. data/vendor/wreq/src/client/core/proto/h1/decode.rs +0 -1170
  119. data/vendor/wreq/src/client/core/proto/h1/dispatch.rs +0 -684
  120. data/vendor/wreq/src/client/core/proto/h1/encode.rs +0 -580
  121. data/vendor/wreq/src/client/core/proto/h1/io.rs +0 -879
  122. data/vendor/wreq/src/client/core/proto/h1/role.rs +0 -694
  123. data/vendor/wreq/src/client/core/proto/h1.rs +0 -104
  124. data/vendor/wreq/src/client/core/proto/h2/client.rs +0 -650
  125. data/vendor/wreq/src/client/core/proto/h2/ping.rs +0 -539
  126. data/vendor/wreq/src/client/core/proto/h2.rs +0 -379
  127. data/vendor/wreq/src/client/core/proto/headers.rs +0 -138
  128. data/vendor/wreq/src/client/core/proto.rs +0 -58
  129. data/vendor/wreq/src/client/core/rt/bounds.rs +0 -57
  130. data/vendor/wreq/src/client/core/rt/timer.rs +0 -150
  131. data/vendor/wreq/src/client/core/rt/tokio.rs +0 -99
  132. data/vendor/wreq/src/client/core/rt.rs +0 -25
  133. data/vendor/wreq/src/client/core/upgrade.rs +0 -267
  134. data/vendor/wreq/src/client/core.rs +0 -16
  135. data/vendor/wreq/src/client/emulation.rs +0 -161
  136. data/vendor/wreq/src/client/http/client/error.rs +0 -142
  137. data/vendor/wreq/src/client/http/client/exec.rs +0 -29
  138. data/vendor/wreq/src/client/http/client/extra.rs +0 -77
  139. data/vendor/wreq/src/client/http/client/util.rs +0 -104
  140. data/vendor/wreq/src/client/http.rs +0 -1629
  141. data/vendor/wreq/src/client/layer/config/options.rs +0 -156
  142. data/vendor/wreq/src/client/layer/cookie.rs +0 -161
  143. data/vendor/wreq/src/hash.rs +0 -143
  144. data/vendor/wreq/src/tls/conn/cache.rs +0 -123
  145. data/vendor/wreq/src/tls/conn/cert_compression.rs +0 -125
  146. data/vendor/wreq/src/tls/keylog/handle.rs +0 -64
  147. data/vendor/wreq/src/tls/options.rs +0 -464
  148. /data/vendor/wreq/src/client/{http → layer}/client/lazy.rs +0 -0
  149. /data/vendor/wreq/src/{client/conn → conn}/proxy.rs +0 -0
  150. /data/vendor/wreq/src/{client/conn → conn}/verbose.rs +0 -0
@@ -1,299 +0,0 @@
1
- use std::{
2
- future::Future,
3
- pin::Pin,
4
- task::{Context, Poll},
5
- };
6
-
7
- use http::{Request, Response};
8
- use http_body::Body;
9
- use pin_project_lite::pin_project;
10
- use tokio::sync::{mpsc, oneshot};
11
-
12
- use super::{Error, body::Incoming, proto::h2::client::ResponseFutMap};
13
-
14
- pub(crate) type RetryPromise<T, U> = oneshot::Receiver<Result<U, TrySendError<T>>>;
15
-
16
- /// An error when calling `try_send_request`.
17
- ///
18
- /// There is a possibility of an error occurring on a connection in-between the
19
- /// time that a request is queued and when it is actually written to the IO
20
- /// transport. If that happens, it is safe to return the request back to the
21
- /// caller, as it was never fully sent.
22
- #[derive(Debug)]
23
- pub struct TrySendError<T> {
24
- pub(crate) error: Error,
25
- pub(crate) message: Option<T>,
26
- }
27
-
28
- pub(crate) fn channel<T, U>() -> (Sender<T, U>, Receiver<T, U>) {
29
- let (tx, rx) = mpsc::unbounded_channel();
30
- let (giver, taker) = want::new();
31
- let tx = Sender {
32
- buffered_once: false,
33
- giver,
34
- inner: tx,
35
- };
36
- let rx = Receiver { inner: rx, taker };
37
- (tx, rx)
38
- }
39
-
40
- /// A bounded sender of requests and callbacks for when responses are ready.
41
- ///
42
- /// While the inner sender is unbounded, the Giver is used to determine
43
- /// if the Receiver is ready for another request.
44
- pub(crate) struct Sender<T, U> {
45
- /// One message is always allowed, even if the Receiver hasn't asked
46
- /// for it yet. This boolean keeps track of whether we've sent one
47
- /// without notice.
48
- buffered_once: bool,
49
- /// The Giver helps watch that the Receiver side has been polled
50
- /// when the queue is empty. This helps us know when a request and
51
- /// response have been fully processed, and a connection is ready
52
- /// for more.
53
- giver: want::Giver,
54
- /// Actually bounded by the Giver, plus `buffered_once`.
55
- inner: mpsc::UnboundedSender<Envelope<T, U>>,
56
- }
57
-
58
- /// An unbounded version.
59
- ///
60
- /// Cannot poll the Giver, but can still use it to determine if the Receiver
61
- /// has been dropped. However, this version can be cloned.
62
- pub(crate) struct UnboundedSender<T, U> {
63
- /// Only used for `is_closed`, since mpsc::UnboundedSender cannot be checked.
64
- giver: want::SharedGiver,
65
- inner: mpsc::UnboundedSender<Envelope<T, U>>,
66
- }
67
-
68
- impl<T, U> Sender<T, U> {
69
- pub(crate) fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<super::Result<()>> {
70
- self.giver.poll_want(cx).map_err(|_| Error::new_closed())
71
- }
72
-
73
- pub(crate) fn is_ready(&self) -> bool {
74
- self.giver.is_wanting()
75
- }
76
-
77
- fn can_send(&mut self) -> bool {
78
- if self.giver.give() || !self.buffered_once {
79
- // If the receiver is ready *now*, then of course we can send.
80
- //
81
- // If the receiver isn't ready yet, but we don't have anything
82
- // in the channel yet, then allow one message.
83
- self.buffered_once = true;
84
- true
85
- } else {
86
- false
87
- }
88
- }
89
-
90
- pub(crate) fn try_send(&mut self, val: T) -> Result<RetryPromise<T, U>, T> {
91
- if !self.can_send() {
92
- return Err(val);
93
- }
94
- let (tx, rx) = oneshot::channel();
95
- self.inner
96
- .send(Envelope(Some((val, Callback(Some(tx))))))
97
- .map(move |_| rx)
98
- .map_err(|mut e| (e.0).0.take().expect("envelope not dropped").0)
99
- }
100
-
101
- pub(crate) fn unbound(self) -> UnboundedSender<T, U> {
102
- UnboundedSender {
103
- giver: self.giver.shared(),
104
- inner: self.inner,
105
- }
106
- }
107
- }
108
-
109
- impl<T, U> UnboundedSender<T, U> {
110
- pub(crate) fn is_ready(&self) -> bool {
111
- !self.giver.is_canceled()
112
- }
113
-
114
- pub(crate) fn is_closed(&self) -> bool {
115
- self.giver.is_canceled()
116
- }
117
-
118
- pub(crate) fn try_send(&mut self, val: T) -> Result<RetryPromise<T, U>, T> {
119
- let (tx, rx) = oneshot::channel();
120
- self.inner
121
- .send(Envelope(Some((val, Callback(Some(tx))))))
122
- .map(move |_| rx)
123
- .map_err(|mut e| (e.0).0.take().expect("envelope not dropped").0)
124
- }
125
- }
126
-
127
- impl<T, U> Clone for UnboundedSender<T, U> {
128
- fn clone(&self) -> Self {
129
- UnboundedSender {
130
- giver: self.giver.clone(),
131
- inner: self.inner.clone(),
132
- }
133
- }
134
- }
135
-
136
- pub(crate) struct Receiver<T, U> {
137
- inner: mpsc::UnboundedReceiver<Envelope<T, U>>,
138
- taker: want::Taker,
139
- }
140
-
141
- impl<T, U> Receiver<T, U> {
142
- pub(crate) fn poll_recv(&mut self, cx: &mut Context<'_>) -> Poll<Option<(T, Callback<T, U>)>> {
143
- match self.inner.poll_recv(cx) {
144
- Poll::Ready(item) => {
145
- Poll::Ready(item.map(|mut env| env.0.take().expect("envelope not dropped")))
146
- }
147
- Poll::Pending => {
148
- self.taker.want();
149
- Poll::Pending
150
- }
151
- }
152
- }
153
-
154
- pub(crate) fn close(&mut self) {
155
- self.taker.cancel();
156
- self.inner.close();
157
- }
158
-
159
- pub(crate) fn try_recv(&mut self) -> Option<(T, Callback<T, U>)> {
160
- use futures_util::FutureExt;
161
- match self.inner.recv().now_or_never() {
162
- Some(Some(mut env)) => env.0.take(),
163
- _ => None,
164
- }
165
- }
166
- }
167
-
168
- impl<T, U> Drop for Receiver<T, U> {
169
- fn drop(&mut self) {
170
- // Notify the giver about the closure first, before dropping
171
- // the mpsc::Receiver.
172
- self.taker.cancel();
173
- }
174
- }
175
-
176
- struct Envelope<T, U>(Option<(T, Callback<T, U>)>);
177
-
178
- impl<T, U> Drop for Envelope<T, U> {
179
- fn drop(&mut self) {
180
- if let Some((val, cb)) = self.0.take() {
181
- cb.send(Err(TrySendError {
182
- error: Error::new_canceled().with("connection closed"),
183
- message: Some(val),
184
- }));
185
- }
186
- }
187
- }
188
-
189
- pub(crate) struct Callback<T, U>(Option<oneshot::Sender<Result<U, TrySendError<T>>>>);
190
-
191
- impl<T, U> Drop for Callback<T, U> {
192
- fn drop(&mut self) {
193
- if let Some(tx) = self.0.take() {
194
- let _ = tx.send(Err(TrySendError {
195
- error: dispatch_gone(),
196
- message: None,
197
- }));
198
- }
199
- }
200
- }
201
-
202
- #[cold]
203
- fn dispatch_gone() -> Error {
204
- // FIXME(nox): What errors do we want here?
205
- Error::new_user_dispatch_gone().with(if std::thread::panicking() {
206
- "user code panicked"
207
- } else {
208
- "runtime dropped the dispatch task"
209
- })
210
- }
211
-
212
- impl<T, U> Callback<T, U> {
213
- pub(crate) fn is_canceled(&self) -> bool {
214
- if let Some(ref tx) = self.0 {
215
- return tx.is_closed();
216
- }
217
-
218
- unreachable!()
219
- }
220
-
221
- pub(crate) fn poll_canceled(&mut self, cx: &mut Context<'_>) -> Poll<()> {
222
- if let Some(ref mut tx) = self.0 {
223
- return tx.poll_closed(cx);
224
- }
225
-
226
- unreachable!()
227
- }
228
-
229
- pub(crate) fn send(mut self, val: Result<U, TrySendError<T>>) {
230
- let _ = self.0.take().unwrap().send(val);
231
- }
232
- }
233
-
234
- impl<T> TrySendError<T> {
235
- /// Take the message from this error.
236
- ///
237
- /// The message will not always have been recovered. If an error occurs
238
- /// after the message has been serialized onto the connection, it will not
239
- /// be available here.
240
- pub fn take_message(&mut self) -> Option<T> {
241
- self.message.take()
242
- }
243
-
244
- /// Consumes this to return the inner error.
245
- pub fn into_error(self) -> Error {
246
- self.error
247
- }
248
- }
249
-
250
- pin_project! {
251
- pub struct SendWhen<B>
252
- where
253
- B: Body,
254
- B: 'static,
255
- {
256
- #[pin]
257
- pub(crate) when: ResponseFutMap<B>,
258
- #[pin]
259
- pub(crate) call_back: Option<Callback<Request<B>, Response<Incoming>>>,
260
- }
261
- }
262
-
263
- impl<B> Future for SendWhen<B>
264
- where
265
- B: Body + 'static,
266
- B::Data: Send,
267
- {
268
- type Output = ();
269
-
270
- fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
271
- let mut this = self.project();
272
-
273
- let mut call_back = this.call_back.take().expect("polled after complete");
274
-
275
- match Pin::new(&mut this.when).poll(cx) {
276
- Poll::Ready(Ok(res)) => {
277
- call_back.send(Ok(res));
278
- Poll::Ready(())
279
- }
280
- Poll::Pending => {
281
- // check if the callback is canceled
282
- match call_back.poll_canceled(cx) {
283
- Poll::Ready(v) => v,
284
- Poll::Pending => {
285
- // Move call_back back to struct before return
286
- this.call_back.set(Some(call_back));
287
- return Poll::Pending;
288
- }
289
- };
290
- trace!("send_when canceled");
291
- Poll::Ready(())
292
- }
293
- Poll::Ready(Err((error, message))) => {
294
- call_back.send(Err(TrySendError { error, message }));
295
- Poll::Ready(())
296
- }
297
- }
298
- }
299
- }