| Age | Commit message (Collapse) | Author | |
|---|---|---|---|
| 6 hours | Make tcp worker multithreaded, too | Dirk Engling | |
| This shamelessly steals the model established in the UDP workers, i.e. if the kernel is able to bind multiple listening sockets to the same endpoint, we will share them across threads. If it can't, all threads will accept on the same socket. The fast path handles most of the connections, only the rare case of no data yet on the socket is offloaded to the slow path (which used to be the mainloop) for completion. This scales nicely, as the higher the load is, the higher chances are that an accept happens only after the network roundtrip to the peer completes, leading to more connections that already have data waiting for us. We also consolidate the workstruct init and deinit code, preparation for later unifying all thread state structs for all protocols (mca, udc and tcp). The config file gains a per tcp connection worker count and some docs explaining what this knob buys and costs, nudging the user to either keep it 0 or dial it up to at least 2. | |||
| 23 hours | Introduce a fast path assuming that a tcp connection's payload already has arrived at accept time | Dirk Engling | |
| 33 hours | Enforce the invariant that each socket is only ever expected to be read from or written to, never both | Dirk Engling | |
| 33 hours | Don't treat a full send buffer as an error when sending http. Retry later | Dirk Engling | |
| 43 hours | Reduce number of per connection sys calls | Dirk Engling | |
| 45 hours | Consolidate all tcp/http tear down into a single http_close function to prevent a rare UAF for expiring connections | Dirk Engling | |
| 4 days | Plug in the new per-thread stats counter, also make sure that the ot_clean sleep does not stall tracker exit | Dirk Engling | |
| 4 days | All OSes now do have a cheap monotonic clock, so no caching thread is needed. Also add some relative time helpers | Dirk Engling | |
| 5 days | Sort info_hashes in a scrape so that the reply forms a valid bencoded dict | Dirk Engling | |
| 5 days | Revive http keep alive to save tcp connection setup costs | Dirk Engling | |
| 5 days | replace all calls to sprintf with a format helper that advances a cursor. Also convert the meta-formatter (i.e. results printer) to this scheme | Dirk Engling | |
| 5 days | Make sure to not accept mere prefixes of addresses from query string | Dirk Engling | |
| 5 days | Replace libowfat's event waiter with our own abstraction | Dirk Engling | |
| It's with a heavy heart that I remove libowfat as my event library from opentracker. libowfat is what taught opentracker to walk and then fly. The tracker was literally standing on the shoulder of giants when I started writing it in 2006. For its time, the event abstraction was unparalleled and it has held up for many years, and it served the bittorrent community greatly. https://erdgeist.org/gitweb/opentracker/commit/?id=ad472597c569568bad0526d116b601dfcb36638c Unfortunately, it is very likely that libowfat will not be maintained anymore for the foreseeable future, it is already not easy to get its source from upstream and opentracker started receiving bug reports that I can not reasonably answer or patch. Before the project gets more dependent on the limitations of libowfat's current state, I need to teach opentracker to stand on its own feet and fly by itself. I've learned a great deal in the process and have even more respect now for what libowfat pioneered. The path for opentracker is cleared now. Ground work has already been laid in the migration process to support multi threaded http processing while keeping the aggressive reduction of syscalls alive that made the libowfat+opentracker combo so scalable. Here be some dragons, though: Even though there is a unit test suite now, the event loop's rewrite has not been battle tested yet. So you might want to hold up for a bit before jumping on the solo band wagon. What awaits at the end will be a long overdue v1.0, which will be named in honour of Felix. | |||
| 5 days | Third run of making variable and function names more readable, integer scans and ip parsers | Dirk Engling | |
| 5 days | Second run of making variable and function names more readable, urlencoder now matches overall naming scheme | Dirk Engling | |
| 5 days | Use new fdstate subsystem to store per fd cookie and timeout | Dirk Engling | |
| 6 days | Factor out the timeout setter, will probably go later once we do the io loop ourself | Dirk Engling | |
| 6 days | Replace libowfat's iobatch with our own smaller (and probably only temporary) ot_batch | Dirk Engling | |
| 6 days | Prevent UAF when resizing iobatches | Dirk Engling | |
| 6 days | Be stricter about const char*, Wwrite-strings will warn in the future and we don't want to try to overwrite string literals | Dirk Engling | |
| 6 days | For workqueue tasks, class has to be in the tasktype or no worker will ever claim the task, forgot one | Dirk Engling | |
| 7 days | Replace custom int64 with its standardized int64_t type | Dirk Engling | |
| 7 days | Prevent a task from outliving its connection | Dirk Engling | |
| 7 days | Replace libowfat's ip scanner and formatters with own own | Dirk Engling | |
| 7 days | Replace libowfat's array with our new blob abstraction | Dirk Engling | |
| 8 days | Null terminate the request at the final return and not after it, preventing a buffer overrun | Dirk Engling | |
| 8 days | Use new ranged unsigned int scanner everywhere and squash some bugs along the way | Dirk Engling | |
| 8 days | Use strncasecmp instead of libowfat's case_equalb | Dirk Engling | |
| 8 days | Replace endianess helpers and remove unused system and libowfat included | Dirk Engling | |
| * Replace libowfat big endian packers with htonl/ntohl * Turn bucket derivation in ot_mutex.c into its own helper * remove unused includes | |||
| 2026-04-03 | Clean up top100 stats code | Dirk Engling | |
| 2026-04-03 | turn all int offsets into size_t | Dirk Engling | |
| 2025-04-25 | Do not ignore return value of iob_init_autofree | Dirk Engling | |
| 2024-04-21 | Move _GNU_SOURCE declaration further to the top, so recursive inclusion of stdio does not ignore the macro | Dirk Engling | |
| 2024-04-18 | Add support for zstd | Dirk Engling | |
| 2024-04-18 | Only have huge downloads (aka chunked) be application/octet-stream | Dirk Engling | |
| 2024-04-17 | Let our fullscrapes have a binary content-type | Dirk Engling | |
| 2024-04-17 | chrome does not accept chunked gzip encoding for http/1.0 protocol version | Dirk Engling | |
| 2024-04-16 | Remove CVS version tags, they did not work anymore after moving to git | Dirk Engling | |
| 2024-04-15 | define _GNU_SOURCE to silence warning about asprintf | Dirk Engling | |
| 2024-04-15 | Use bzero instead of the new iob_init for older libowfats | Dirk Engling | |
| 2024-04-15 | Allow the use of iob_init if the new libowfat is not yet available | Dirk Engling | |
| 2024-04-15 | clang-format | Dirk Engling | |
| 2024-04-14 | remove debug fprintfs used to catch a bug | Dirk Engling | |
| 2024-04-14 | Call io_dontwantread only once on a socket | Dirk Engling | |
| 2024-04-13 | Initialise io_batches with their appropiate init function | Dirk Engling | |
| 2024-04-13 | Remove unused macro | Dirk Engling | |
| 2024-04-13 | Use asprintf to allocate header instead of fixed array | Dirk Engling | |
| 2024-04-13 | Fix type warnings in debug strings | Dirk Engling | |
| 2024-04-13 | Add proper parsing for the gzip content encoding | Dirk Engling | |
| 2024-04-13 | Better track current iobatch | Dirk Engling | |
