12#ifndef PROTO_FUZZER_HAPPY_EYEBALLS_MOCK_SERVER_H_
13#define PROTO_FUZZER_HAPPY_EYEBALLS_MOCK_SERVER_H_
21#include "curl_fuzzer.pb.h"
25namespace proto_fuzzer {
41 void Install(CURL* easy)
override;
55 curl_socket_t
HandleOpenSocket(curlsocktype purpose,
struct curl_sockaddr* address)
override;
59 void RunLoop(CURLM* multi, CURL* easy,
const curl::fuzzer::proto::Scenario& scenario)
override;
65 const curl::fuzzer::proto::Connection* script =
nullptr;
66 std::size_t next_chunk = 0;
68 std::size_t pending_offset = 0;
69 bool sent_final =
false;
74 void CloseListeners();
80 void ClosePeer(Peer* peer);
82 const curl::fuzzer::proto::Connection* ScriptForAccept(std::size_t index)
const;
84 bool IsOwnedDestination(
const struct curl_sockaddr* address)
const;
94 std::string serve_address_;
96 std::vector<int> dummy_fds_;
98 std::size_t opened_socket_count_;
99 std::size_t accepted_peer_count_;
104 bool setup_ok_ =
false;
107 const curl::fuzzer::proto::Scenario* scenario_;
109 std::vector<Peer> peers_;
112 CurlSlistPtr resolve_list_;
std::size_t accepted_peer_count() const
std::size_t opened_socket_count() const
void RunLoop(CURLM *multi, CURL *easy, const curl::fuzzer::proto::Scenario &scenario) override
Run a bounded perform loop that also accepts real loopback connections and serves their response scri...
curl_socket_t HandleOpenSocket(curlsocktype purpose, struct curl_sockaddr *address) override
Hand curl a fresh unconnected socket for every address its happy-eyeballs filter decides to race.
~HappyEyeballsMockServer() override
Release listeners and accepted loopback peers.
int listener_port() const
void Install(CURL *easy) override
Install the shared socket callbacks and remember the easy handle for the later resolve/port/timeout s...
HappyEyeballsMockServer()
Construct an idle peer with no listener or accepted connections.
SocketSetupDisposition GetSocketSetupDisposition(curl_socket_t curlfd, curlsocktype purpose) const override
Stream peers must follow curl's ordinary connect path; unlike the socketpair mocks,...
void ConfigureRequestData(ScenarioRequestData *request_data) override
Replace the resolver lane's single-address mapping with a two-address entry for the fixed canonical h...
Builds HTTP headers or TELNET options, MIME state, and upload callbacks whose storage or userdata lib...
Common ownership types for independently cleaned-up curl handles.
MockServerBase — common plumbing shared by every protocol-specific mock server.
SocketSetupDisposition
Tell curl whether an application-provided socket still needs its normal connect/options setup or alre...