|
curl-fuzzer C++ reference
|
Reuses MockServer's request-triggered raw chunk delivery: the first chunks become SOCKS negotiation replies and later chunks become the tunneled HTTP response. More...
#include <socks4_mock_server.h>
Public Member Functions | |
| ProxyTransportMockServer (curl::fuzzer::proto::SocksProxyMode mode, bool haproxy_protocol) | |
| Select a fixed SOCKS wire version, resolution side, and optional HAProxy prefix. | |
| void | ObserveState () override |
| Retain protocol outcomes in coverage and introspector builds. | |
| void | Install (CURL *easy) override |
| Install common socket callbacks and the fixed SOCKS proxy policy. | |
| const std::string & | client_transcript () 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 | 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 |
| Create one socketpair peer and attach the raw-byte transcript observer. | |
| void | ObserveIncomingData (const unsigned char *data, std::size_t size) override |
| Retain a bounded prefix of client bytes for strict integration tests. | |
| bool | SupportsRepeatedPollsetProbe () const override |
| 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. | |
| 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. | |
Reuses MockServer's request-triggered raw chunk delivery: the first chunks become SOCKS negotiation replies and later chunks become the tunneled HTTP response.
Routing is fixed to a numeric loopback proxy whose socket is replaced by MockServer's socketpair, so neither proxy nor origin can reach the network. The historical source filename follows the packaged target basename; the class name reflects the broader append-only transport lane.
Definition at line 28 of file socks4_mock_server.h.
| proto_fuzzer::ProxyTransportMockServer::ProxyTransportMockServer | ( | curl::fuzzer::proto::SocksProxyMode | mode, |
| bool | haproxy_protocol ) |
Select a fixed SOCKS wire version, resolution side, and optional HAProxy prefix.
Script bytes still decide which advertised SOCKS5 authentication method the peer selects.
| mode | Proxy protocol and hostname-resolution mode to install. |
| haproxy_protocol | Whether to send a fixed protocol-v1 prefix after SOCKS tunnel establishment. |
Definition at line 58 of file socks4_mock_server.cc.
| const std::string & proto_fuzzer::ProxyTransportMockServer::client_transcript | ( | ) | const |
Definition at line 92 of file socks4_mock_server.cc.
|
overrideprotectedvirtual |
Create one socketpair peer and attach the raw-byte transcript observer.
Reimplemented from proto_fuzzer::MockServer.
Definition at line 96 of file socks4_mock_server.cc.
|
overridevirtual |
Install common socket callbacks and the fixed SOCKS proxy policy.
| easy | Easy handle to configure. |
Reimplemented from proto_fuzzer::MockServerBase.
Definition at line 63 of file socks4_mock_server.cc.
|
overrideprotectedvirtual |
Retain a bounded prefix of client bytes for strict integration tests.
| data | First byte in this drained fragment. |
| size | Number of bytes available at data. |
Implements proto_fuzzer::IncomingDataObserver.
Definition at line 108 of file socks4_mock_server.cc.
|
overrideprotectedvirtual |
Reimplemented from proto_fuzzer::MockServer.
Definition at line 103 of file socks4_mock_server.cc.