#include <grpc/support/port_platform.h>
#include "src/core/ext/filters/channel_idle/channel_idle_filter.h"
#include <stdlib.h>
#include <functional>
#include <utility>
#include "absl/types/optional.h"
#include <grpc/grpc.h>
#include <grpc/support/log.h>
#include "src/core/lib/channel/channel_args.h"
#include "src/core/lib/channel/channel_stack_builder.h"
#include "src/core/lib/channel/promise_based_filter.h"
#include "src/core/lib/config/core_configuration.h"
#include "src/core/lib/debug/trace.h"
#include "src/core/lib/gprpp/debug_location.h"
#include "src/core/lib/gprpp/orphanable.h"
#include "src/core/lib/gprpp/status_helper.h"
#include "src/core/lib/iomgr/closure.h"
#include "src/core/lib/iomgr/error.h"
#include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/promise/exec_ctx_wakeup_scheduler.h"
#include "src/core/lib/promise/loop.h"
#include "src/core/lib/promise/poll.h"
#include "src/core/lib/promise/promise.h"
#include "src/core/lib/promise/sleep.h"
#include "src/core/lib/promise/try_seq.h"
#include "src/core/lib/surface/channel_init.h"
#include "src/core/lib/surface/channel_stack_type.h"
#include "src/core/lib/transport/http2_errors.h"
namespace grpc_core {
namespace {
const auto kDefaultIdleTimeout = …;
const auto kDefaultMaxConnectionAge = …;
const auto kDefaultMaxConnectionAgeGrace = …;
const auto kDefaultMaxConnectionIdle = …;
const auto kMaxConnectionAgeJitter = …;
TraceFlag grpc_trace_client_idle_filter(false, "client_idle_filter");
}
#define GRPC_IDLE_FILTER_LOG(format, ...) …
namespace {
Duration GetClientIdleTimeout(const ChannelArgs& args) { … }
}
struct MaxAgeFilter::Config { … };
absl::StatusOr<ClientIdleFilter> ClientIdleFilter::Create(
const ChannelArgs& args, ChannelFilter::Args filter_args) { … }
absl::StatusOr<MaxAgeFilter> MaxAgeFilter::Create(
const ChannelArgs& args, ChannelFilter::Args filter_args) { … }
void MaxAgeFilter::Shutdown() { … }
void MaxAgeFilter::PostInit() { … }
ArenaPromise<ServerMetadataHandle> ChannelIdleFilter::MakeCallPromise(
CallArgs call_args, NextPromiseFactory next_promise_factory) { … }
bool ChannelIdleFilter::StartTransportOp(grpc_transport_op* op) { … }
void ChannelIdleFilter::Shutdown() { … }
void ChannelIdleFilter::IncreaseCallCount() { … }
void ChannelIdleFilter::DecreaseCallCount() { … }
void ChannelIdleFilter::StartIdleTimer() { … }
void ChannelIdleFilter::CloseChannel() { … }
const grpc_channel_filter ClientIdleFilter::kFilter = …;
const grpc_channel_filter MaxAgeFilter::kFilter = …;
void RegisterChannelIdleFilters(CoreConfiguration::Builder* builder) { … }
MaxAgeFilter::MaxAgeFilter(grpc_channel_stack* channel_stack,
const Config& max_age_config)
: … { … }
}