48 void Install(CURL* easy)
override;
59 const std::string&
doh_url()
const {
return doh_url_; }
63 return doh_tls_transport_ ==
nullptr ? 0 : doh_tls_transport_->completed_handshake_count();
68 return doh_tls_transport_ ==
nullptr ? std::string() : doh_tls_transport_->negotiated_alpn();
81 void RunLoop(CURLM* multi, CURL* easy,
const curl::fuzzer::proto::Scenario& scenario)
override;
85 static constexpr std::size_t kMaxConnections = 8;
88 static constexpr std::size_t kMaxRequestBytes = 4096;
89 static constexpr std::size_t kMaxResponseBytes = 4096;
90 static constexpr std::size_t kMaxDiagnosticBytes = 4096;
94 bool active()
const {
return fd >= 0 || tls !=
nullptr; }
95 void ObserveIncomingData(
const unsigned char* data, std::size_t size)
override;
98 std::unique_ptr<MockConnection> tls;
100 std::string response;
101 std::size_t response_offset = 0;
102 std::size_t deferred_write_turns = 0;
103 bool writing =
false;
104 bool request_overflow =
false;
107 virtual bool StartListener();
109 bool ConfigureHttpsOptions();
110 static CURLcode ObserveSslContext(CURL* easy,
void* ssl_context,
void* user_data);
111 bool BeginProxyBypass();
112 void EndProxyBypass();
114 void ServiceDohConnections();
115 void AcceptConnections();
116 void CloseConnection(DohConnection*
connection);
117 bool CompleteRequest(DohConnection*
connection);
121 std::string doh_url_;
124 curl::fuzzer::proto::DohOptionProbeMode option_probe_mode_;
127 curl::fuzzer::proto::DohTransportMode transport_mode_;
130 std::FILE* diagnostic_stream_;
133 std::unique_ptr<BoundedAnonymousInputFile> tls_path_fixture_;
136 std::size_t internal_ssl_ctx_callback_count_;
140 std::unique_ptr<TlsMockTransport> doh_tls_transport_;
142 std::array<DohConnection, kMaxConnections> connections_;
143 std::size_t doh_request_count_;
144 std::size_t httpsrr_answer_count_;
147 curl::fuzzer::proto::DohResponseMode response_mode_;
160 bool proxy_bypass_active_;
161 bool lower_no_proxy_was_set_;
162 bool upper_no_proxy_was_set_;
163 std::string saved_no_proxy_lower_;
164 std::string saved_no_proxy_upper_;
H2OriginMockServer(curl::fuzzer::proto::TlsCertificateChainProfile certificate_chain=curl::fuzzer::proto::TLS_CERTIFICATE_CHAIN_DEFAULT_EC, curl::fuzzer::proto::TlsGroupProfile group_profile=curl::fuzzer::proto::TLS_GROUP_X25519)
Construct an HTTP/2 TLS peer with the selected certificate chain.