fanquake
commented at 12:35 PM on January 26, 2026:
member
This builds on all the work being done by pinheadmz and fjahr (#35182, #34342), to demo a libevent-less bitcoind.
One thing we could decide to change, or not, is the libevent logging catergory. Other than that, any remaining references to libevent, should be in documentation/code comments.
DrahtBot
commented at 12:35 PM on January 26, 2026:
contributor
<!--e57a25ab6845829454e8d69fc972939a-->
The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.
#25722 (refactor: Use util::Result class for wallet loading by ryanofsky)
#25665 (refactor: Add util::Result failure types and ability to merge result values by ryanofsky)
#25573 (guix: produce a -static-pie bitcoind by fanquake)
If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first.
<!--5faf32d7da4f0f540f40219e4f7537a3-->
LLM Linter (✨ experimental)
Possible places where named args for integral literals may be used (e.g. func(x, /*named_arg=*/0) in C++, and func(x, named_arg=0) in Python):
Lookup(host, port, /*fAllowLookup=*/true, /*nMaxSolutions=*/256) in .src/bitcoin-cli.cpp
Lookup(address_string, port, false) in src/httpserver.cpp
Possible places where comparison-specific test macros should replace generic comparisons:
[test/functional/interface_http.py] assert response.getheader('WWW-Authenticate') is not None -> use assert_not_equal(response.getheader('WWW-Authenticate'), None)
<sup>2026-05-18 14:21:14</sup>
fanquake force-pushed on Jan 26, 2026
DrahtBot added the label CI failed on Jan 26, 2026
pinheadmz
commented at 4:05 PM on January 26, 2026:
member
nit: Pull request description should be replaced by the lyrics of Taylor Swift's "We Are Never Ever Getting Back Together" before merging.
fanquake force-pushed on Jan 28, 2026
fanquake force-pushed on Feb 2, 2026
fanquake force-pushed on Feb 3, 2026
fanquake force-pushed on Feb 9, 2026
fanquake force-pushed on Feb 10, 2026
DrahtBot added the label Needs rebase on Feb 11, 2026
fanquake force-pushed on Feb 18, 2026
DrahtBot removed the label Needs rebase on Feb 18, 2026
DrahtBot added the label Needs rebase on Feb 19, 2026
fanquake force-pushed on Feb 25, 2026
DrahtBot removed the label Needs rebase on Feb 25, 2026
DrahtBot added the label Needs rebase on Feb 26, 2026
fanquake force-pushed on Apr 30, 2026
fanquake force-pushed on Apr 30, 2026
fanquake
commented at 10:17 AM on April 30, 2026:
member
Rebased on master, and the latest versions of #32061 and #34342.
DrahtBot removed the label Needs rebase on Apr 30, 2026
fanquake force-pushed on Apr 30, 2026
DrahtBot added the label Needs rebase on May 5, 2026
fanquake force-pushed on May 8, 2026
DrahtBot removed the label Needs rebase on May 8, 2026
fanquake force-pushed on May 11, 2026
fanquake force-pushed on May 13, 2026
fanquake force-pushed on May 14, 2026
fanquake force-pushed on May 15, 2026
fanquake
commented at 8:57 AM on May 15, 2026:
member
test: cover common HTTP attacks and common malformed requests6ba7ecbced
util/string: LineReader should preserve whitespace
The utility can not be opinionated about space on either end of a
line it reads. That decision is up to the caller and in fact in the
case of HTTP should be allowed in some places and rejected in others.
dd8cabb422
http: enclose libevent-dependent code in a namespace
This commit is a no-op to isolate HTTP methods and objects that
depend on libevent. Following commits will add replacement objects
and methods in a new namespace for testing and review before
switching over the server.
HTTP Response message:
https://datatracker.ietf.org/doc/html/rfc1945#section-6
Status line (first line of response):
https://datatracker.ietf.org/doc/html/rfc1945#section-6.1
Status code definitions:
https://datatracker.ietf.org/doc/html/rfc1945#section-9
9be45e10da
http: Implement HTTPRequest class
HTTP Request message:
https://datatracker.ietf.org/doc/html/rfc1945#section-5
Request Line aka Control Line aka first line:
https://datatracker.ietf.org/doc/html/rfc1945#section-5.1
See message_read_status() in libevent http.c for how
`MORE_DATA_EXPECTED` is handled there
2e399d50ed
http: Introduce HTTPServer class and implement binding to listening socket
Introduce a new low-level socket managing class `HTTPServer`.
BindAndStartListening() was copied from CConnMan's BindListenPort()
in net.cpp and modernized.
Unit-test it with a new class `SocketTestingSetup` which mocks
`CreateSock()` and will enable mock client I/O in future commits.
Co-authored-by: Vasil Dimov <vd@FreeBSD.org>
d1c9fe1785
HTTPServer: implement and test AcceptConnection()
AcceptConnection() is mostly copied from CConmann in net.cpp
and then modernized.
Co-authored-by: Vasil Dimov <vd@FreeBSD.org>
c79055ba66
HTTPServer: generate sequential Ids for each newly accepted connection
Co-authored-by: Vasil Dimov <vd@FreeBSD.org>
2ea6f8d8b3
http: Introduce HTTPClient classa17143b098
HTTPServer: start an I/O loop in a new thread and accept connections
Socket handling methods are copied from CConnMan:
`CConnman::GenerateWaitSockets()`
`CConnman::SocketHandlerListening()`
`CConnman::ThreadSocketHandler()` and `CConnman::SocketHandler()` are combined into ThreadSocketHandler()`.
Co-authored-by: Vasil Dimov <vd@FreeBSD.org>
a12cdbf080
HTTPServer: read requests from connected clients
`SocketHandlerConnected()` adapted from CConnman
Testing this requires adding a new feature to the SocketTestingSetup,
inserting a "request" payload into the mock client that connects
to us.
This commit also moves IOErrorIsPermanent() from sock.cpp to sock.h
so it can be called from the socket handler in httpserver.cpp
Co-authored-by: Vasil Dimov <vd@FreeBSD.org>
9b0beaf153
HTTPserver: support "chunked" Transfer-Encoding2202f1a5b4
HTTPServer: compose and send replies to connected clients
Sockets-touching bits copied and adapted from `CConnman::SocketSendData()`
Testing this requires adding a new feature to the SocketTestingSetup,
returning the DynSock I/O pipes from the mock socket so the received
data can be checked.
Co-authored-by: Vasil Dimov <vd@FreeBSD.org>
47fe6e47c6
HTTPServer: disconnect clients5660ee445e
Allow http workers to send data optimistically as an optimization922a0b6c7b
HTTPServer: use a queue to pipeline requests from each connected client
See https://www.rfc-editor.org/rfc/rfc7230#section-6.3.2
> A server MAY process a sequence of pipelined requests in
parallel if they all have safe methods (Section 4.2.1 of [RFC7231]),
but it MUST send the corresponding responses in the same order that
the requests were received.
We choose NOT to process requests in parallel. They are executed in
the order recevied as well as responded to in the order received.
This prevents race conditions where old state may get sent in response
to requests that are very quick to process but were requested later on
in the queue.
2af9cefcb1
define HTTP request methods at module level outside of class
This is a refactor to prepare for matching the API of HTTPRequest
definitions in both namespaces http_bitcoin and http_libevent. In
particular, to provide a consistent return type for GetRequestMethod()
in both classes.
e3084c9b75
Add helper methods to HTTPRequest to match original API
These methods are called by http_request_cb() and are present in the
original http_libevent::HTTPRequest.
ec5a272274
refactor: split http_request_cb into libevent callback and dispatch
The original function is passed to libevent as a callback when HTTP
requests are received and processed. It wrapped the libevent request
object in a http_libevent::HTTPRequest and then handed that off to
bitcoin for basic checks and finally dispatch to worker threads.
In this commit we split the function after the
http_libevent::HTTPRequest is created, and pass that object to a new
function that maintains the logic of checking and dispatching.
This will be the merge point for http_libevent and http_bitcoin,
where HTTPRequest objects from either namespace have the same
downstream lifecycle.
82da44cf5f
refactor: split HTTPBindAddresses into config parse and libevent setup
The original function was already naturally split into two chunks:
First, we parse and validate the users' RPC configuration for IPs and
ports. Next we bind libevent's http server to the appropriate
endpoints.
This commit splits these chunks into two separate functions, leaving
the argument parsing in the common space of the module and moving the
libevent-specific binding into the http_libevent namespace.
A future commit will implement http_bitcoin::HTTPBindAddresses to
bind the validate list of endpoints by the new HTTP server.
3b24bcb522
HTTPServer: implement control methods to match legacy API0ef471597c
HTTPServer: disconnect after idle timeout (-rpcservertimeout)7f053083f3
http: switch servers from libevent to bitcoin466fd5982b
fuzz: switch http_libevent::HTTPRequest to http_bitcoin::HTTPRequest53859ef224
http: remove libevent usage from this subsystem11c3d56c15
logging: deprecate libevent category
Creates logic to deprecate logging categories but still
"support" them so the software doesn't quit with unknown category
on startup. Deprecated categories are always false and attempts
to switch them are logged as wwarnings.
592547bc15
doc: add release note for #35182 replace libevent HTTP servere01e70388b
ci: Tolerate unused free functions in intermediate commits
When bigger changes are split across multiple commits, intermediate
commits may introduce unused functions. Do not check for this error
in intermediate commits.
This is a metadata mirror of the GitHub repository
bitcoin/bitcoin.
This site is not affiliated with GitHub.
Content is generated from a GitHub metadata backup.
generated: 2026-05-20 06:52 UTC