|
curl-fuzzer C++ reference
|
The ordinary Gopher peer plus two closed selector-write probes. More...
#include <gopher_mock_server.h>
Public Member Functions | |
| GopherMockServer (curl::fuzzer::proto::GopherProbeMode mode) | |
| Construct a closed Gopher probe peer. | |
| 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 | Install (CURL *easy) |
| Install the common OPENSOCKETFUNCTION / OPENSOCKETDATA / SOCKOPTFUNCTION callbacks on 'easy'. | |
| 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 |
| Build an ordinary socketpair, then saturate the client-to-server direction for the timeout probe before curl can write its selector. | |
| void | RunLoop (CURLM *multi, CURL *easy, const curl::fuzzer::proto::Scenario &scenario) override |
| Apply the two fixed timing policies immediately before curl's first perform. | |
| Protected Member Functions inherited from proto_fuzzer::MockServer | |
| void | ResetConnections () |
| Release all current and retired socketpairs before resetting transport- specific state. | |
| virtual void | ObserveActiveTransfer (CURL *easy) |
| Observe curl while its connection filters are still attached. | |
| 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 void | HandleDetachedMulti (CurlMultiPtr multi) |
| Dispose of or retain the multi after its easy handle has been removed. | |
| 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. | |
The ordinary Gopher peer plus two closed selector-write probes.
No mode accepts arbitrary timing or environment values from the protobuf.
Definition at line 21 of file gopher_mock_server.h.
|
explicit |
Construct a closed Gopher probe peer.
| mode | Fixed probe selected by normalized target policy. |
Definition at line 60 of file gopher_mock_server.cc.
|
overrideprotectedvirtual |
Build an ordinary socketpair, then saturate the client-to-server direction for the timeout probe before curl can write its selector.
Reimplemented from proto_fuzzer::MockServer.
Definition at line 68 of file gopher_mock_server.cc.
|
overrideprotectedvirtual |
Apply the two fixed timing policies immediately before curl's first perform.
Scenario options cannot replace these harness-owned values.
| multi | Multi handle driving the transfer. |
| easy | Easy handle receiving fixed timeout policy. |
| scenario | Normalized response script. |
Implements proto_fuzzer::MockServerBase.
Definition at line 88 of file gopher_mock_server.cc.