Commit graph

75 commits

Author SHA1 Message Date
Joakim Frostegård
8d58f8bb70 init logger in aquatic_cli_helpers crate 2020-08-02 21:21:58 +02:00
Joakim Frostegård
427c0bc7c3 aquatic_http: add keep_alive setting (default true)
This might be good for performance in the real world. It also
enables fairer load test comparisons with opentracker, which
in my understanding drops connections after sending responses.
2020-08-02 20:06:49 +02:00
Joakim Frostegård
c8b94adab5 aquatic_http: remove Connection.shutdown fn 2020-08-02 19:26:12 +02:00
Joakim Frostegård
cb3ec8cbf1 WIP: get http load test into better (but bad) state
Is now able to maintain correspondence with aquatic_http
and opentracker
2020-08-02 06:38:36 +02:00
Joakim Frostegård
e7de66603e aquatic_http: add upper limit on request read buffer 2020-08-02 02:45:56 +02:00
Joakim Frostegård
a3a1d1606b WIP: udp: add ipv6 support
Returning IPv6 peers doesn't really work with UDP. It is not supported by
https://libtorrent.org/udp_tracker_protocol.html. There is a suggestion in
https://web.archive.org/web/20170503181830/http://opentracker.blog.h3q.com/2007/12/28/the-ipv6-situation/
of using action number 4 and returning IPv6 octets just like for IPv4
addresses. Clients seem not to support it very well, but due to a lack of
alternative solutions, it is implemented here
2020-07-31 05:37:58 +02:00
Joakim Frostegård
fd68a5f603 aquatic_http: serialize responses to a buffer ref instead of new vec
This improves benchmark performance somewhat and performance
during load testing a bit too.
2020-07-24 21:59:23 +02:00
Joakim Frostegård
228511b3aa aquatic_http: replace flume with crossbeam; clean connections less often 2020-07-24 20:36:46 +02:00
Joakim Frostegård
f1f708465a remove aquatic_common_tcp crate, move contents into aquatic_http
It doesn't make a lot of sense to make a separate crate for
the few things here. I don't really want tight coupling between
the crates anyway, since it impedes making changes in them
and makes understanding them more difficult.
2020-07-21 23:01:34 +02:00
Joakim Frostegård
f2db4a43b9 Update lots of dependencies 2020-07-21 00:58:56 +02:00
Joakim Frostegård
95e25710dc aquatic_http: move request parsing into protocol crate 2020-07-20 20:13:56 +02:00
Joakim Frostegård
19ee41eb72 aquatic_http: config: set poll timeout in microseconds, default to 10000 2020-07-20 15:46:17 +02:00
Joakim Frostegård
4ac2012a2a aquatic_http: move protocol module to new crate aquatic_http_protocol 2020-07-19 21:59:31 +02:00
Joakim Frostegård
4caf174da5 aquatic_http: add criterion benchmark for announce response to bytes
Speedup of custom implementation compared to using bendy:

announce-response-to-bytes:

time:   [413.77 ns 415.34 ns 417.08 ns]
change: [-93.074% -93.021% -92.968%] (p = 0.00 < 0.01)
Performance has improved.
2020-07-19 16:56:13 +02:00
Joakim Frostegård
9df1f0ecc6 aquatic_http: rewrite request parsing, use smartstring
Use smartstring in PeerMapKey too.

Improves benchmark speed.

request-from-path:

time:   [2.1484 us 2.1530 us 2.1586 us]
change: [-24.246% -23.908% -23.570%] (p = 0.00 < 0.01)
Performance has improved.
2020-07-19 15:38:26 +02:00
Joakim Frostegård
fc9b4c8e0d aquatic_http: protocol: add test for scrape request parsing 2020-07-19 14:28:48 +02:00
Joakim Frostegård
12a62f5df4 aquatic_http: add test for announce request parsing 2020-07-19 14:23:48 +02:00
Joakim Frostegård
54e801c6a9 aquatic http: request from path: whitelist url keys for security
This way, the non-ddos-resistant hashmap hasher can be kept. Also
improves performance, probably simply because less hashing work
is done:

time:   [2.8050 us 2.8156 us 2.8274 us]
change: [-22.940% -22.412% -21.916%] (p = 0.00 < 0.01)
Performance has improved.
2020-07-19 13:46:36 +02:00
Joakim Frostegård
b17c9999f0 aquatic_http: request from path: remove from map to avoid some clones
change: [-3.8362% -3.2346% -2.5437%] (p = 0.00 < 0.01)
Performance has improved.
2020-07-19 13:24:48 +02:00
Joakim Frostegård
ca8d278a03 aquatic_http: parse_key_value_pairs_memchr: small code improvement 2020-07-19 13:06:39 +02:00
Joakim Frostegård
a8e355f22a aquatic_http: add criterion benchmarks for request from path parsing
About 35% improvement by using both memchr methods
2020-07-19 01:58:41 +02:00
Joakim Frostegård
9b0956cc91 aquatic_http: Request::from_http_get_path: add memchar query str parser 2020-07-18 18:40:27 +02:00
Joakim Frostegård
84facea0ca aquatic_http: add hand-written ScrapeResponse serialization 2020-07-18 17:46:16 +02:00
Joakim Frostegård
81708e0adc aquatic_http: add manual bencoding for announce and failure responses
This is more performant
2020-07-18 16:28:42 +02:00
Joakim Frostegård
056cd41732 aquatic_http: add memchr version of urldecode, which might be faster 2020-07-18 06:05:13 +02:00
Joakim Frostegård
f94c52da77 aquatic_http: send_response: use itoa and Vec::with_capacity
This leads to fewer allocations and possibly better performance.
2020-07-18 03:05:40 +02:00
Joakim Frostegård
8ddccb20aa aquatic_http: use new trait Ip for ip generic parameters 2020-07-08 14:22:30 +02:00
Joakim Frostegård
2386dd0e8b aquatic_http: parameterise many data structures over peer IP protocol 2020-07-08 14:13:10 +02:00
Joakim Frostegård
da4ba14b47 aquatic_http: EstablishedConnection.send_response: fix small bug 2020-07-08 12:28:46 +02:00
Joakim Frostegård
43a33d80c4 aquatic_http: add ipv6 compact responses; fix ipv4/ipv6 issue 2020-07-08 12:26:41 +02:00
Joakim Frostegård
c53c3928ab aquatic_http: fix clippy error, or at least log possible error 2020-07-05 20:33:24 +02:00
Joakim Frostegård
b65297195a aquatic_http, aquatic_common_tcp: fix some clippy warnings 2020-07-05 20:22:03 +02:00
Joakim Frostegård
8269ae2994 aquatic_http: remove (no longer used) dependency serde_urlencoded 2020-07-05 19:50:52 +02:00
Joakim Frostegård
76a340574e aquatic_http: debug log StreamEnded, keep connection on parse error 2020-07-04 19:38:37 +02:00
Joakim Frostegård
8ebfb1d0ce aquatic_http network: avoid infinite loop case; minor other changes 2020-07-04 15:04:31 +02:00
Joakim Frostegård
ccafdc5cd3 aquatic_http: clean up clode 2020-07-04 13:51:43 +02:00
Joakim Frostegård
d48573a28e aquatic_http: network: update inline hints, format code 2020-07-04 13:47:47 +02:00
Joakim Frostegård
c28e764929 aquatic_http: add Connection methods, enabling making 'inner' private 2020-07-04 13:35:52 +02:00
Joakim Frostegård
1ea1f0b749 aquatic_http: in Connection.inner, replace Either with new enum 2020-07-04 13:28:55 +02:00
Joakim Frostegård
73b1646c71 aquatic_http: refactor TlsHandshakeMachine, adding error type 2020-07-04 13:10:57 +02:00
Joakim Frostegård
829701f4da aquatic_http: debug-log request GET path, use debug mode for bytes read 2020-07-04 12:38:30 +02:00
Joakim Frostegård
c50dec3496 aquatic_http: add PeerMapKey with PeerID and Either<Ip, announce key> 2020-07-04 12:00:36 +02:00
Joakim Frostegård
2f2da8deb0 aquatic_http: AnnounceRequest: make numwant optional, remove trackerid 2020-07-04 11:20:58 +02:00
Joakim Frostegård
6b7ce0e211 aquatic_http: error response on invalid request; rename response types 2020-07-04 11:08:48 +02:00
Joakim Frostegård
15c75579da aquatic_http request url decode: reject some invalid data 2020-07-03 17:54:59 +02:00
Joakim Frostegård
c2f79aa368 aquatic_http: reduce allocations in Request::urldecode 2020-07-03 17:43:34 +02:00
Joakim Frostegård
7419c51434 aquatic_http protocol: refactor into more submodules, other fixes 2020-07-03 17:25:31 +02:00
Joakim Frostegård
52cc7d8acb aquatic_http: write custom deserialize logic for Request 2020-07-03 17:10:30 +02:00
Joakim Frostegård
16333b5a08 aquatic_http: serialize info_hash and peer_id properly 2020-07-03 14:30:00 +02:00
Joakim Frostegård
52a29fc14a aquatic_http: store info_hash and peer_id in [u8; 20] 2020-07-03 13:17:02 +02:00