|
curl-fuzzer C++ reference
|
Runs Connection's bounded raw-byte scripts as HTTP/2 frames over the real in-process TLS transport. More...
#include <h2_origin_mock_server.h>
Public Member Functions | |
| 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. | |
| void | Install (CURL *easy) override |
| Keep transport selection out of the mutation grammar. | |
| const H2Runtime & | runtime () const |
| Expose shared protocol observations without allowing carrier state changes. | |
| std::size_t | cleaned_push_count () const |
| Public Member Functions inherited from proto_fuzzer::TlsMockServer | |
| TlsMockServer () | |
| Build one reusable in-process server context per fuzz iteration. | |
| TlsMockServer (curl::fuzzer::proto::TlsCertificateChainProfile certificate_chain, curl::fuzzer::proto::TlsHandshakeProfile handshake_profile=curl::fuzzer::proto::TLS_HANDSHAKE_DEFAULT) | |
| Select one bounded certificate-chain profile for an HTTP/1.1 TLS peer. | |
| ~TlsMockServer () override | |
| Release SSL objects before their owning server context. | |
| void | Install (CURL *easy) override |
| Install common socket callbacks and a stable local trust anchor. | |
| bool | saw_live_tls_session () const |
| std::size_t | exported_session_count () const |
| std::size_t | imported_session_count () const |
| int | negotiated_tls_version () const |
| std::size_t | completed_handshake_count () const |
| std::size_t | reused_session_count () const |
| std::size_t | write_retry_count () const |
| std::string | negotiated_alpn () const |
| std::string | negotiated_group () const |
| int | ech_status () const |
| std::string | ech_inner_name () const |
| std::string | ech_outer_name () const |
| Public Member Functions inherited from proto_fuzzer::MockServer | |
| MockServer (MultiDrivePolicy drive_policy=MultiDrivePolicy::kPerform) | |
| Construct an idle MockServer with no scripted responses or open peers. | |
| ~MockServer () override | |
| Default destructor; current and previous MockConnections clean up their server-side descriptors only after curl has been removed from the multi. | |
| void | SetScripts (const curl::fuzzer::proto::Scenario &scenario) |
| Build the complete borrowed script table before entering curl. | |
| void | SetKeepConnectionsOpen (bool keep_open) |
| Keep completed response sockets writable instead of half-closing them. | |
| CURLcode | DriveEasyScenario (CURL *easy, const curl::fuzzer::proto::Scenario &scenario, bool use_events=false) override |
| Preload all bounded response bytes from inside OPENSOCKETFUNCTION, where the mock still owns both socketpair ends, and half-close the peer when the preload finishes. | |
| ConnectOnlyRunStats | DriveConnectOnlyScenario (CURL *easy, const curl::fuzzer::proto::Scenario &scenario) override |
| Establish only the HTTP transport, then pass bounded application bytes through curl's public direct-I/O wrappers. | |
| bool | DeliverNextChunk () |
| Push the next queued chunk. | |
| bool | has_more_chunks () const |
| bool | ServiceConnections () |
| Service one deterministic application event-loop turn by draining all available request bytes and releasing at most one response chunk. | |
| std::size_t | opened_connection_count () const |
| Report how many peer sockets curl opened during the current script run. | |
| Public Member Functions inherited from proto_fuzzer::MockServerBase | |
| virtual | ~MockServerBase () |
| Out-of-line destructor so MockConnection can stay forward-declared in the base header (its complete type is only needed where unique_ptr is instantiated for destruction). | |
| virtual void | ObserveState () |
| Default no-op for peers without protocol-specific observations. | |
| virtual void | ConfigureRequestData (ScenarioRequestData *request_data) |
| Bind protocol-specific work to the request-data callbacks after their per-scenario state has been constructed. | |
| CURLcode | DriveScenario (CURL *easy, const curl::fuzzer::proto::Scenario &scenario) |
| Run 'scenario' to completion on 'easy': allocate a multi, attach 'easy', delegate protocol-specific work to RunLoop, consume its completion message, and clean up. | |
| void | SetMultiObserver (MultiObserver observer) |
| Register an observer invoked with the live multi handle after 'easy' is attached and before the drive loop starts. | |
| MockConnection * | connection () |
Protected Member Functions | |
| std::unique_ptr< MockConnection > | CreateConnection () override |
| Attach the reusable H2 client-frame tracker after TLS decryption. | |
| void | RunLoop (CURLM *multi, CURL *easy, const curl::fuzzer::proto::Scenario &scenario) override |
| Run the raw HTTP/2 response driver and probe server push and upkeep APIs. | |
| void | HandleDetachedMulti (CurlMultiPtr multi) override |
| Keep the connection cache alive until this mock is destroyed, after the caller has cleaned the detached easy handle. | |
| Protected Member Functions inherited from proto_fuzzer::TlsMockServer | |
| TlsMockServer (TlsApplicationProtocol protocol, curl::fuzzer::proto::TlsCertificateChainProfile certificate_chain=curl::fuzzer::proto::TLS_CERTIFICATE_CHAIN_DEFAULT_EC, TlsGroupPolicy group_policy=TlsGroupPolicy::kProviderDefault, curl::fuzzer::proto::TlsHandshakeProfile handshake_profile=curl::fuzzer::proto::TLS_HANDSHAKE_DEFAULT) | |
| Construct the shared TLS transport for a protocol-specific derived peer with one fixed ALPN outcome. | |
| TlsGroupPolicy | group_policy () const |
| std::unique_ptr< MockConnection > | CreateConnection () override |
| Wrap one socketpair server endpoint in an OpenSSL acceptor consumed by MockServer. | |
| void | ObserveActiveTransfer (CURL *easy) override |
| Query while the connection filters are attached. | |
| Protected Member Functions inherited from proto_fuzzer::MockServer | |
| void | ResetConnections () |
| Release all current and retired socketpairs before resetting transport- specific state. | |
| virtual bool | SupportsRepeatedPollsetProbe () const |
| Ordinary HTTP and compatibility peers retain the historical perform-only loop even if an append-only scenario field is present. | |
| curl_socket_t | HandleOpenSocket (curlsocktype purpose=CURLSOCKTYPE_IPCXN, struct curl_sockaddr *address=nullptr) override |
| Called by the OPENSOCKETFUNCTION trampoline in the base class. | |
| void | RunLoop (CURLM *multi, CURL *easy, const curl::fuzzer::proto::Scenario &scenario) override |
| Seed the mock from the scenario, then drive the perform loop until curl is done or a deterministic operation/idle budget is hit. | |
| Protected Member Functions inherited from proto_fuzzer::MockServerBase | |
| MockServerBase (MultiDrivePolicy drive_policy=MultiDrivePolicy::kPerform) | |
| Construct an empty base instance with a fixed multi-drive policy. | |
| virtual SocketSetupDisposition | GetSocketSetupDisposition (curl_socket_t curlfd, curlsocktype purpose) const |
| Describe the socket returned by HandleOpenSocket without issuing native descriptor queries. | |
| MultiSocketDriver * | multi_socket_driver () |
| Expose the callback state installed for the current socket-action drive. | |
| std::size_t | additional_handle_cleanup_count () const |
| void | ResumeResponseIfRequested (CURL *easy) |
| Resume receive-side callback output at one bounded drive boundary when the dedicated API plan requested it. | |
| void | ApplyPendingBackpressure () |
| Apply the BackpressureConfig cached by DriveScenario to the new connection_. | |
Additional Inherited Members | |
| Public Types inherited from proto_fuzzer::MockServerBase | |
| using | MultiObserver = std::function<void(CURLM*)> |
| Callback type used to publish the driving multi handle to observers. | |
| Static Protected Member Functions inherited from proto_fuzzer::MockServerBase | |
| static int | WaitOnMultiFdset (CURLM *multi, CURLMcode *rc) |
| Wait on curl's fdset with a short timeout. | |
| static void | ProbeMultiPollset (CURLM *multi) |
| Ask curl to construct and inspect its connection-filter pollset without waiting. | |
| static bool | MultiPollsetWantsWrite (CURLM *multi, curl_socket_t socket) |
| Inspect one socket's current writable interest through curl's public multi fdset API. | |
| static bool | UsesTimedDrive (const curl::fuzzer::proto::Scenario &scenario) |
| Treat a non-default BackpressureConfig as an explicit request for the slower, timed drive policy. | |
| Protected Attributes inherited from proto_fuzzer::MockServerBase | |
| std::unique_ptr< MockConnection > | connection_ |
| The per-scenario MockConnection, lazily created by HandleOpenSocket(). | |
| int | pending_recv_buf_bytes_ |
| Cached SO_RCVBUF/SO_SNDBUF setting in bytes. | |
| std::size_t | pending_drain_limit_ |
| Cached per-call DrainIncoming byte budget. | |
| MultiSocketDriver * | multi_socket_driver_ |
| Non-owning pointer into DriveScenario's stack. | |
| std::size_t | additional_handle_cleanup_count_ |
| Number of application-created handles, excluding the caller's parent, successfully removed from the current multi and cleaned up. | |
| bool | resume_response_ |
| True only for an API-plan multi drive with its one-shot write callback. | |
| MultiObserver | multi_observer_ |
| Observer receiving the live multi handle at the start of a drive. | |
| Static Protected Attributes inherited from proto_fuzzer::MockServerBase | |
| static constexpr int | kMaxDriveIterations = 512 |
| Hard operation budget for one scenario. | |
| static constexpr int | kMaxIdleIterations = 8 |
| Consecutive no-progress budget for ordinary scenarios. | |
| static constexpr int | kMaxTimedIdleIterations = 256 |
| Explicit backpressure scenarios get a larger idle budget and may use the short timed wait above. | |
Runs Connection's bounded raw-byte scripts as HTTP/2 frames over the real in-process TLS transport.
The lane fixes protocol selection rather than relying on a mutable CURLOPT_HTTP_VERSION, and installs the public server- push callback before curl emits its initial SETTINGS frame.
Definition at line 27 of file h2_origin_mock_server.h.
|
explicit |
Construct an HTTP/2 TLS peer with the selected certificate chain.
| certificate_chain | Fixed certificate-chain profile to present. |
| group_profile | Key-exchange group profile shared by both endpoints. |
Definition at line 30 of file h2_origin_mock_server.cc.
| std::size_t proto_fuzzer::H2OriginMockServer::cleaned_push_count | ( | ) | const |
Definition at line 93 of file h2_origin_mock_server.cc.
|
overrideprotectedvirtual |
Attach the reusable H2 client-frame tracker after TLS decryption.
Reimplemented from proto_fuzzer::MockServer.
Definition at line 57 of file h2_origin_mock_server.cc.
|
overrideprotectedvirtual |
Keep the connection cache alive until this mock is destroyed, after the caller has cleaned the detached easy handle.
| multi | Detached multi handle and its live connection cache. |
Reimplemented from proto_fuzzer::MockServerBase.
Definition at line 86 of file h2_origin_mock_server.cc.
|
overridevirtual |
Keep transport selection out of the mutation grammar.
Applying Scenario options after this hook is safe because the fixed H2 policy removes HTTP_VERSION and does not expose UPKEEP_INTERVAL_MS in the structured option manifest.
| easy | Easy handle to configure. |
Reimplemented from proto_fuzzer::MockServerBase.
Definition at line 46 of file h2_origin_mock_server.cc.
|
overrideprotectedvirtual |
Run the raw HTTP/2 response driver and probe server push and upkeep APIs.
| multi | Multi handle containing easy. |
| easy | Easy handle attached to this mock. |
| scenario | Source of bounded HTTP/2 response bytes. |
Implements proto_fuzzer::MockServerBase.
Definition at line 67 of file h2_origin_mock_server.cc.
| const H2Runtime & proto_fuzzer::H2OriginMockServer::runtime | ( | ) | const |
Expose shared protocol observations without allowing carrier state changes.
Definition at line 90 of file h2_origin_mock_server.cc.