fanquake
commented at 12:35 pm on January 26, 2026:
member
This builds on all the work being done by pinheadmz and fjahr (#32061, #34342, #34158), 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
The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.
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.
LLM Linter (✨ experimental)
Possible typos and grammar issues:
an unique -> a unique [Use “a” before a consonant sound; “unique” begins with a consonant sound, so “a unique” is correct]
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):
sock.Recv(recv_buf, sizeof(recv_buf), /flags=/0) in src/bitcoin-cli.cpp
sock.Recv(recv_buf, sizeof(recv_buf), /flags=/0) in src/bitcoin-cli.cpp
sock.Recv(recv_buf, sizeof(recv_buf), /flags=/0) in src/bitcoin-cli.cpp
(Only occurrences matching the criteria were these third-argument integral literals used in C++ socket Recv calls.)
2026-02-25 15:14:37
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
common: Add unused UrlEncode function3d34a61e75
http: Add HTTPHeader file in common
This will be shared between the http server and the bitcoin-cli http client code.
8d8e2c051f
cli: Remove libevent usage
Replace libevent-based HTTP client with a simple synchronous implementation using the Sock class directly.
44988e1943
refactor: Use constexpr in torcontrol where possibleb005f12c83
refactor: Modernize member variable names in torcontrole32ed51c39
refactor: Get rid of unnecessary newlines in logs7c20e98980
torcontrol: Remove libevent usage
Replace libevent-based approach with using the Sock class and CThreadInterrupt.
1730f4bac5
fuzz: Improve torcontrol fuzz test
Gets rid of the Dummy class and adds coverage of get_socks_cb.
8bcb66edc8
test: Add simple functional test for torcontrole354eeefdb
test: Add test for partial message handling in torcontrol96e32538eb
string: replace AsciiCaseInsensitiveKeyEqual with CaseInsensitiveEqual
This reverts commit eea38787b9be99c3f192cb83fc18358397e4ab52 from PR #34242
We do not need comparators for an unordered_map for HTTPHeaders, we just
need a simple, locale-independent, ascii-only compare function for
a vector of key-value pairs of strings.
We have CaseInsensitiveEqual already in test utils, this commit moves
it to the strencodings module for use in the application code.
8037b5e3a1
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.
1192966fa6
http: Implement HTTPHeaders class
see:
https://www.rfc-editor.org/rfc/rfc2616#section-4.2
https://www.rfc-editor.org/rfc/rfc7231#section-5
https://www.rfc-editor.org/rfc/rfc7231#section-7
https://httpwg.org/specs/rfc9111.html#header.field.definitions
This commit also moves StringToBuffer to test/util/str
since it is now used in more than one test.
9848bfdccb
http: Implement HTTPResponse class
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
5d2029e6b7
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
e669dc8cdf
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>
6919661201
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>
42789ed804
HTTPServer: generate sequential Ids for each newly accepted connection
Co-authored-by: Vasil Dimov <vd@FreeBSD.org>
58703e3b33
http: Introduce HTTPClient class651e3828eb
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>
e647b1af8d
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.
Co-authored-by: Vasil Dimov <vd@FreeBSD.org>
851799761c
HTTPserver: support "chunked" Transfer-Encoding96226e3639
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>
1da887758f
HTTPServer: disconnect clientsb7170f034a
Allow http workers to send data optimistically as an optimizatione37ad1f18a
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.
36b1d0bb8a
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.
7f4d1e5073
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.
22716eedff
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.
7e318a079d
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.
fb9b0f01c0
HTTPServer: implement control methods to match legacy API8c00e0c400
HTTPServer: disconnect after idle timeout (-rpcservertimeout)822b0b0cee
http: switch servers from libevent to bitcoin7ae4054de3
fuzz: switch http_libevent::HTTPRequest to http_bitcoin::HTTPRequest1528884ecb
http: delete libevent!ab62dfee61
Revert "http: Add HTTPHeader file in common"
This reverts commit 8d8e2c051fccd9d549892d06a3d674fc6927e300.
82ff275b4d
f: fixupb2de495ff2
test: remove raii_event_tests9d19b5729e
cmake: remove libevent2fa73d25da
depends: remove libevent8cb4229d38
ci: remove libevent18a7594d47
vcpkg: remove libeventb3695e18a1
doc: remove libevent3b3f8eb7e2
fanquake force-pushed
on Feb 25, 2026
DrahtBot removed the label
Needs rebase
on Feb 25, 2026
DrahtBot
commented at 8:51 pm on February 26, 2026:
contributor
🐙 This pull request conflicts with the target branch and needs rebase.
DrahtBot added the label
Needs rebase
on Feb 26, 2026
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-03-09 21:13 UTC
This site is hosted by @0xB10C More mirrored repositories can be found on mirror.b10c.me