#ifndef GRPC_SRC_CORE_LIB_SURFACE_LAME_CLIENT_H
#define GRPC_SRC_CORE_LIB_SURFACE_LAME_CLIENT_H
#include <grpc/support/port_platform.h>
#include <memory>
#include "absl/base/thread_annotations.h"
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include <grpc/grpc.h>
#include "src/core/lib/channel/channel_args.h"
#include "src/core/lib/channel/channel_fwd.h"
#include "src/core/lib/channel/promise_based_filter.h"
#include "src/core/lib/gprpp/sync.h"
#include "src/core/lib/iomgr/error.h"
#include "src/core/lib/promise/arena_promise.h"
#include "src/core/lib/transport/connectivity_state.h"
#include "src/core/lib/transport/transport.h"
namespace grpc_core {
grpc_arg MakeLameClientErrorArg(grpc_error_handle* error);
class LameClientFilter : public ChannelFilter {
public:
static const grpc_channel_filter kFilter;
static absl::StatusOr<LameClientFilter> Create(
const ChannelArgs& args, ChannelFilter::Args filter_args);
ArenaPromise<ServerMetadataHandle> MakeCallPromise(
CallArgs call_args, NextPromiseFactory next_promise_factory) override;
bool StartTransportOp(grpc_transport_op*) override;
bool GetChannelInfo(const grpc_channel_info*) override;
private:
explicit LameClientFilter(absl::Status error);
absl::Status error_;
struct State {
State();
Mutex mu;
ConnectivityStateTracker state_tracker ABSL_GUARDED_BY(mu);
};
std::unique_ptr<State> state_;
};
}
#endif