proxygen/lib/http/session/HTTPDirectResponseHandler.h (35 lines of code) (raw):
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree.
*/
#pragma once
#include <proxygen/lib/http/session/HTTPTransaction.h>
namespace proxygen {
class HTTPErrorPage;
class HTTPDirectResponseHandler : public HTTPTransaction::Handler {
public:
HTTPDirectResponseHandler(unsigned statusCode,
const std::string& statusMsg,
const HTTPErrorPage* errorPage = nullptr);
void forceConnectionClose(bool close) {
forceConnectionClose_ = close;
}
// HTTPTransaction::Handler methods
void setTransaction(HTTPTransaction* txn) noexcept override;
void detachTransaction() noexcept override;
void onHeadersComplete(std::unique_ptr<HTTPMessage> msg) noexcept override;
void onBody(std::unique_ptr<folly::IOBuf> chain) noexcept override;
void onTrailers(std::unique_ptr<HTTPHeaders> trailers) noexcept override;
void onEOM() noexcept override;
void onUpgrade(UpgradeProtocol protocol) noexcept override;
void onError(const HTTPException& error) noexcept override;
// These are no-ops since the direct response is already in memory
void onEgressPaused() noexcept override {
}
void onEgressResumed() noexcept override {
}
private:
~HTTPDirectResponseHandler() override;
HTTPTransaction* txn_;
const HTTPErrorPage* errorPage_;
std::string statusMessage_;
unsigned statusCode_;
bool headersSent_ : 1;
bool eomSent_ : 1;
bool forceConnectionClose_ : 1;
};
} // namespace proxygen