You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.3 KiB
C++
44 lines
1.3 KiB
C++
// SPDX-License-Identifier: BSD-2-Clause
|
|
// author: Max Kellermann <max.kellermann@gmail.com>
|
|
|
|
#pragma once
|
|
|
|
#include "Handler.hxx"
|
|
|
|
#include <memory>
|
|
|
|
class CurlResponseParser;
|
|
|
|
/**
|
|
* A #CurlResponseHandler implementation which delegates response body
|
|
* parsing to another object which is created dynamically. This is
|
|
* useful when a different parser needs to be used under certain
|
|
* runtime conditions (e.g. depending on the status or content type).
|
|
*/
|
|
class DelegateCurlResponseHandler : public CurlResponseHandler {
|
|
std::unique_ptr<CurlResponseParser> parser;
|
|
|
|
protected:
|
|
/**
|
|
* HTTP response headers have been received, and we now need a
|
|
* parser. This method constructs one and returns it (or
|
|
* throws an exception which will be passed to
|
|
* CurlResponseParser::OnError()).
|
|
*/
|
|
virtual std::unique_ptr<CurlResponseParser> MakeParser(unsigned status,
|
|
Curl::Headers &&headers) = 0;
|
|
|
|
/**
|
|
* The parser has finished parsing the response body. This
|
|
* method can be used to evaluate the result. Exceptions
|
|
* thrown by this method will be passed to
|
|
* CurlResponseParser::OnError().
|
|
*/
|
|
virtual void FinishParser(std::unique_ptr<CurlResponseParser> p) = 0;
|
|
|
|
public:
|
|
void OnHeaders(unsigned status, Curl::Headers &&headers) final;
|
|
void OnData(std::span<const std::byte> data) final;
|
|
void OnEnd() final;
|
|
};
|