#include <grpc/support/port_platform.h>
#include "src/core/ext/filters/deadline/deadline_filter.h"
#include <functional>
#include <memory>
#include <new>
#include <utility>
#include "absl/status/status.h"
#include "absl/types/optional.h"
#include <grpc/grpc.h>
#include <grpc/status.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/config/core_configuration.h"
#include "src/core/lib/gprpp/debug_location.h"
#include "src/core/lib/gprpp/status_helper.h"
#include "src/core/lib/iomgr/error.h"
#include "src/core/lib/iomgr/exec_ctx.h"
#include "src/core/lib/iomgr/timer.h"
#include "src/core/lib/promise/arena_promise.h"
#include "src/core/lib/promise/context.h"
#include "src/core/lib/surface/call.h"
#include "src/core/lib/surface/channel_init.h"
#include "src/core/lib/surface/channel_stack_type.h"
#include "src/core/lib/transport/metadata_batch.h"
namespace grpc_core {
class TimerState { … };
}
static void start_timer_if_needed(grpc_deadline_state* deadline_state,
grpc_core::Timestamp deadline) { … }
static void cancel_timer_if_needed(grpc_deadline_state* deadline_state) { … }
static void recv_trailing_metadata_ready(void* arg, grpc_error_handle error) { … }
static void inject_recv_trailing_metadata_ready(
grpc_deadline_state* deadline_state, grpc_transport_stream_op_batch* op) { … }
struct start_timer_after_init_state { … };
static void start_timer_after_init(void* arg, grpc_error_handle error) { … }
grpc_deadline_state::grpc_deadline_state(grpc_call_element* elem,
const grpc_call_element_args& args,
grpc_core::Timestamp deadline)
: … { … }
grpc_deadline_state::~grpc_deadline_state() { … }
void grpc_deadline_state_reset(grpc_deadline_state* deadline_state,
grpc_core::Timestamp new_deadline) { … }
void grpc_deadline_state_client_start_transport_stream_op_batch(
grpc_deadline_state* deadline_state, grpc_transport_stream_op_batch* op) { … }
static grpc_error_handle deadline_init_channel_elem(
grpc_channel_element* , grpc_channel_element_args* args) { … }
static void deadline_destroy_channel_elem(grpc_channel_element* ) { … }
struct server_call_data { … };
static grpc_error_handle deadline_init_call_elem(
grpc_call_element* elem, const grpc_call_element_args* args) { … }
static void deadline_destroy_call_elem(
grpc_call_element* elem, const grpc_call_final_info* ,
grpc_closure* ) { … }
static void deadline_client_start_transport_stream_op_batch(
grpc_call_element* elem, grpc_transport_stream_op_batch* op) { … }
static void recv_initial_metadata_ready(void* arg, grpc_error_handle error) { … }
static void deadline_server_start_transport_stream_op_batch(
grpc_call_element* elem, grpc_transport_stream_op_batch* op) { … }
const grpc_channel_filter grpc_client_deadline_filter = …;
const grpc_channel_filter grpc_server_deadline_filter = …auto deadline = …;
bool grpc_deadline_checking_enabled(
const grpc_core::ChannelArgs& channel_args) { … }
namespace grpc_core {
void RegisterDeadlineFilter(CoreConfiguration::Builder* builder) { … }
}