Go to the documentation of this file.
32 #include "absl/base/thread_annotations.h"
33 #include "absl/meta/type_traits.h"
34 #include "absl/status/status.h"
35 #include "absl/strings/str_cat.h"
36 #include "absl/strings/str_format.h"
37 #include "absl/strings/string_view.h"
39 #include <grpc/byte_buffer.h>
101 bool is_notify_tag_closure) = 0;
190 reinterpret_cast<char*
>(
this) +
204 bool is_notify_tag_closure)
override;
236 const Slice* authority_metadata =
238 if (authority_metadata ==
nullptr)
return "";
453 std::memory_order_release,
454 std::memory_order_relaxed)) {
483 "Census tracing propagation requested without Census context "
490 "Census context propagation requested without Census tracing "
503 if (pc->first_child ==
nullptr) {
504 pc->first_child =
this;
508 cc->
sibling_prev = pc->first_child->child_->sibling_prev;
536 size_t initial_size =
channel->CallSizeEstimate();
538 size_t call_alloc_size =
543 initial_size, call_alloc_size,
channel->allocator());
544 arena = arena_with_call.first;
548 *out_call =
call->c_ptr();
550 if (
call->is_client()) {
551 call->final_op_.client.status_details =
nullptr;
552 call->final_op_.client.status =
nullptr;
553 call->final_op_.client.error_string =
nullptr;
558 if (
args->authority.has_value()) {
564 call->final_op_.server.cancelled =
nullptr;
565 call->final_op_.server.core_server =
args->server;
569 if (parent !=
nullptr) {
571 parent,
args->propagation_mask)));
575 call->call_stack(),
args->server_transport_data,
577 call->start_time_,
call->send_deadline(),
578 call->arena(), &
call->call_combiner_};
582 if (parent !=
nullptr) {
583 call->PublishToParent(parent);
589 if (
args->cq !=
nullptr) {
591 "Only one of 'cq' and 'pollset_set_alternative' should be "
597 if (
args->pollset_set_alternative !=
nullptr) {
599 args->pollset_set_alternative);
606 if (
call->is_client()) {
608 if (channelz_channel !=
nullptr) {
611 }
else if (
call->final_op_.server.core_server !=
nullptr) {
613 call->final_op_.server.core_server->channelz_node();
614 if (channelz_node !=
nullptr) {
641 c->~FilterStackCall();
648 c->recv_initial_metadata_.Clear();
649 c->recv_trailing_metadata_.Clear();
650 c->receiving_slice_buffer_.reset();
661 &c->final_info_.final_status,
nullptr,
nullptr,
662 &(c->final_info_.error_string));
664 c->final_info_.stats.latency =
668 grpc_schedule_on_exec_ctx));
673 if (cc ==
nullptr)
return;
678 if (
this == pc->first_child) {
680 if (
this == pc->first_child) {
681 pc->first_child =
nullptr;
719 if (peer_string !=
nullptr)
return gpr_strdup(peer_string);
721 if (peer_string !=
nullptr)
return peer_string;
743 grpc_schedule_on_exec_ctx);
759 CancelState*
state =
static_cast<CancelState*
>(
arg);
761 "on_complete for cancel_stream op");
762 state->call->InternalUnref(
"termination");
777 CancelState*
state =
new CancelState;
780 grpc_schedule_on_exec_ctx);
783 op->cancel_stream =
true;
784 op->payload->cancel_stream.cancel_error =
error;
812 if (channelz_channel !=
nullptr) {
823 final_op_.server.core_server->channelz_node();
824 if (channelz_node !=
nullptr) {
840 for (
size_t i = 0;
i <
count;
i++) {
860 gpr_log(GPR_DEBUG,
"Append error: %s",
861 absl::StrCat(
"key=", StringViewFromSlice(md->key),
863 " value=", value.as_string_view())
872 class PublishToAppEncoder {
876 void Encode(
const Slice&
key,
const Slice&
value) {
883 template <
typename Which>
886 void Encode(UserAgentMetadata,
const Slice&
slice) {
890 void Encode(HostMetadata,
const Slice&
slice) {
894 void Encode(GrpcPreviousRpcAttemptsMetadata,
uint32_t count) {
902 void Encode(LbTokenMetadata,
const Slice&
slice) {
919 mdusr->value =
value;
928 if (
b->count() == 0)
return;
934 if (
dest->count +
b->count() >
dest->capacity) {
940 PublishToAppEncoder encoder(
dest);
984 "Received trailing metadata with no error and no status");
996 const uint32_t allowed_write_positions =
998 const uint32_t invalid_positions = ~allowed_write_positions;
999 return !(
flags & invalid_positions);
1005 return !(
flags & invalid_positions);
1031 size_t slot_idx = BatchSlotForOp(
ops[0].
op);
1034 if (*pslot !=
nullptr) {
1036 if (bctl->
call_ !=
nullptr) {
1039 bctl->~BatchControl();
1053 if (pc !=
nullptr) {
1056 child = pc->first_child;
1057 if (
child !=
nullptr) {
1059 Call* next_child_call =
child->child_->sibling_next;
1060 if (
child->cancellation_is_inherited_) {
1061 child->InternalRef(
"propagate_cancel");
1063 child->InternalUnref(
"propagate_cancel");
1065 child = next_child_call;
1066 }
while (
child != pc->first_child);
1076 call->send_initial_metadata_.Clear();
1083 "Attempt to send message after stream was closed."));
1085 call->sending_message_ =
false;
1086 call->send_slice_buffer_.Clear();
1089 call->send_trailing_metadata_.Clear();
1094 call->PropagateCancellationToChildren();
1099 *
call->receiving_buffer_ !=
nullptr) {
1101 *
call->receiving_buffer_ =
nullptr;
1111 call->InternalUnref(
"completion");
1117 BatchControl* bctl = static_cast<BatchControl*>(user_data);
1118 Call* call = bctl->call_;
1119 bctl->call_ = nullptr;
1120 call->InternalUnref(
"completion");
1134 if (!
call->receiving_slice_buffer_.has_value()) {
1135 *
call->receiving_buffer_ =
nullptr;
1136 call->receiving_message_ =
false;
1139 call->test_only_last_message_flags_ =
call->receiving_stream_flags_;
1143 nullptr, 0,
call->incoming_compression_algorithm_);
1148 call->receiving_slice_buffer_->c_slice_buffer(),
1149 &(*
call->receiving_buffer_)->data.raw.slice_buffer);
1150 call->receiving_message_ =
false;
1151 call->receiving_slice_buffer_.reset();
1160 call->receiving_slice_buffer_.reset();
1161 if (batch_error_.ok()) {
1162 batch_error_.set(
error);
1170 !
call->receiving_slice_buffer_.has_value() ||
1172 reinterpret_cast<gpr_atm>(
this))) {
1173 ProcessDataAfterMetadata();
1179 const char* algo_name =
nullptr;
1182 absl::StrFormat(
"Compression algorithm '%s' is disabled.", algo_name);
1189 const char* algo_name =
nullptr;
1192 "Compression algorithm ('%s') not present in the "
1193 "accepted encodings (%s)",
1202 call->channel_->compression_options();
1204 call->incoming_compression_algorithm_;
1207 .
IsSet(compression_algorithm))) {
1209 call->HandleCompressionAlgorithmDisabled(compression_algorithm);
1214 !
call->encodings_accepted_by_peer_.IsSet(compression_algorithm))) {
1216 call->HandleCompressionAlgorithmNotAccepted(compression_algorithm);
1229 call->RecvInitialFilter(
md);
1233 ValidateFilteredMetadata();
1237 call_->set_send_deadline(*deadline);
1240 if (batch_error_.ok()) {
1241 batch_error_.set(
error);
1251 if (rsr_bctlp == 0) {
1268 grpc_schedule_on_exec_ctx);
1273 if (saved_rsr_closure !=
nullptr) {
1283 "recv_trailing_metadata_ready");
1291 if (batch_error_.ok()) {
1292 batch_error_.set(
error);
1302 bool is_notify_tag_closure) {
1308 bool has_send_ops =
false;
1309 int num_recv_ops = 0;
1315 for (
i = 0;
i < nops;
i++) {
1316 if (seen_ops & (1
u <<
ops[
i].
op)) {
1319 seen_ops |= (1
u <<
ops[
i].
op);
1325 if (!is_notify_tag_closure) {
1342 if (bctl ==
nullptr) {
1347 static_cast<uint8_t>(is_notify_tag_closure != 0);
1349 stream_op = &bctl->
op_;
1353 for (
i = 0;
i < nops;
i++) {
1357 goto done_with_error;
1362 if (!AreInitialMetadataFlagsValid(
op->
flags)) {
1364 goto done_with_error;
1368 goto done_with_error;
1377 bool level_set =
false;
1379 effective_compression_level =
1385 if (
copts.default_level.is_set) {
1387 effective_compression_level =
copts.default_level.level;
1394 effective_compression_level);
1402 goto done_with_error;
1410 goto done_with_error;
1425 has_send_ops =
true;
1429 if (!AreWriteFlagsValid(
op->
flags)) {
1431 goto done_with_error;
1435 goto done_with_error;
1439 goto done_with_error;
1457 has_send_ops =
true;
1464 goto done_with_error;
1468 goto done_with_error;
1472 goto done_with_error;
1478 has_send_ops =
true;
1485 goto done_with_error;
1489 goto done_with_error;
1493 goto done_with_error;
1498 goto done_with_error;
1507 goto done_with_error;
1515 "Server returned error"),
1544 has_send_ops =
true;
1551 goto done_with_error;
1555 goto done_with_error;
1563 static_cast<BatchControl*
>(bctl)->ReceivingInitialMetadataReady(
1566 bctl, grpc_schedule_on_exec_ctx);
1585 goto done_with_error;
1589 goto done_with_error;
1598 stream_op_payload->
recv_message.call_failed_before_recv_message =
1608 "recv_message_ready");
1611 bctl, grpc_schedule_on_exec_ctx);
1621 goto done_with_error;
1625 goto done_with_error;
1629 goto done_with_error;
1647 static_cast<BatchControl*
>(bctl)->ReceivingTrailingMetadataReady(
1650 bctl, grpc_schedule_on_exec_ctx);
1660 goto done_with_error;
1664 goto done_with_error;
1668 goto done_with_error;
1680 static_cast<BatchControl*
>(bctl)->ReceivingTrailingMetadataReady(
1683 bctl, grpc_schedule_on_exec_ctx);
1693 if (!is_notify_tag_closure) {
1702 static_cast<BatchControl*>(bctl)->FinishBatch(error);
1704 bctl, grpc_schedule_on_exec_ctx);
1796 "grpc_call_cancel_with_status("
1797 "c=%p, status=%d, description=%s, reserved=%p)",
1832 size_t nops,
void*
tag,
void* reserved) {
1834 "grpc_call_start_batch(call=%p, ops=%p, nops=%lu, tag=%p, "
1836 5, (
call,
ops, (
unsigned long)nops,
tag, reserved));
1838 if (reserved !=
nullptr) {
1887 return "GRPC_CALL_ERROR";
1889 return "GRPC_CALL_ERROR_ALREADY_ACCEPTED";
1891 return "GRPC_CALL_ERROR_ALREADY_FINISHED";
1893 return "GRPC_CALL_ERROR_ALREADY_INVOKED";
1895 return "GRPC_CALL_ERROR_BATCH_TOO_BIG";
1897 return "GRPC_CALL_ERROR_INVALID_FLAGS";
1899 return "GRPC_CALL_ERROR_INVALID_MESSAGE";
1901 return "GRPC_CALL_ERROR_INVALID_METADATA";
1903 return "GRPC_CALL_ERROR_NOT_INVOKED";
1905 return "GRPC_CALL_ERROR_NOT_ON_CLIENT";
1907 return "GRPC_CALL_ERROR_NOT_ON_SERVER";
1909 return "GRPC_CALL_ERROR_NOT_SERVER_COMPLETION_QUEUE";
1911 return "GRPC_CALL_ERROR_PAYLOAD_TYPE_MISMATCH";
1913 return "GRPC_CALL_ERROR_TOO_MANY_OPERATIONS";
1915 return "GRPC_CALL_ERROR_COMPLETION_QUEUE_SHUTDOWN";
1917 return "GRPC_CALL_OK";
absl::optional< SliceBuffer > receiving_slice_buffer_
#define GRPC_CLOSURE_INIT(closure, cb, cb_arg, scheduler)
grpc_core::TraceFlag grpc_compression_trace(false, "compression")
virtual void InternalUnref(const char *reason)=0
struct grpc_byte_buffer * send_message
absl::string_view GetServerAuthority() const override
static void ReleaseCall(void *call, grpc_error_handle)
GPRAPI void grpc_slice_buffer_move_into(grpc_slice_buffer *src, grpc_slice_buffer *dst)
uint32_t enabled_algorithms_bitset
@ GRPC_CALL_ERROR_ALREADY_INVOKED
const char ** error_string
grpc_metadata_array * trailing_metadata
#define GRPC_CALL_LOG_BATCH(sev, ops, nops)
virtual absl::string_view GetServerAuthority() const =0
bool cancellation_is_inherited_
void * grpc_call_arena_alloc(grpc_call *call, size_t size)
#define GRPC_ERROR_CREATE_FROM_COPIED_STRING(desc)
grpc_status_code * status
grpc_status_code * status
GRPCAPI grpc_byte_buffer * grpc_raw_byte_buffer_create(grpc_slice *slices, size_t nslices)
const grpc_slice & grpc_slice_ref_internal(const grpc_slice &slice)
@ GRPC_CALL_ERROR_TOO_MANY_OPERATIONS
void SetNotifyOnCancel(grpc_closure *closure)
std::string StrCat(const AlphaNum &a, const AlphaNum &b)
GRPCAPI grpc_byte_buffer * grpc_raw_compressed_byte_buffer_create(grpc_slice *slices, size_t nslices, grpc_compression_algorithm compression)
grpc_error_handle grpc_call_create(grpc_call_create_args *args, grpc_call **out_call)
ABSL_MUST_USE_RESULT std::string StrFormat(const FormatSpec< Args... > &format, const Args &... args)
#define GPR_DEBUG_ASSERT(x)
@ GRPC_CALL_ERROR_INVALID_MESSAGE
bool PrepareApplicationMetadata(size_t count, grpc_metadata *metadata, bool is_trailing)
struct grpc_op::grpc_op_data::grpc_op_send_initial_metadata send_initial_metadata
void grpc_call_set_completion_queue(grpc_call *call, grpc_completion_queue *cq)
std::atomic< intptr_t > steps_to_complete_
Call(Arena *arena, bool is_client, Timestamp send_deadline)
def completion(terminal_metadata, code, message)
bool received_initial_metadata_
#define GPR_TIMER_SCOPE(tag, important)
grpc_call_stack * grpc_call_stack_from_top_element(grpc_call_element *elem)
virtual char * GetPeer()=0
grpc_compression_algorithm CompressionAlgorithmForLevel(grpc_compression_level level) const
void ExternalRef() override
grpc_compression_algorithm incoming_compression_algorithm_
uint32_t receiving_stream_flags_
grpc_closure * on_complete
struct grpc_byte_buffer::grpc_byte_buffer_data::grpc_compressed_buffer raw
gpr_atm received_final_op_atm_
void grpc_call_stack_set_pollset_or_pollset_set(grpc_call_stack *call_stack, grpc_polling_entity *pollent)
struct grpc_core::FilterStackCall::BatchControl::@33::@34 notify_tag
grpc_compression_algorithm
void PropagateCancellationToChildren()
static void done_termination(void *arg, grpc_error_handle)
static StaticSlice FromStaticString(const char *s)
@ GRPC_CALL_ERROR_NOT_ON_CLIENT
char * GetPeer() override
grpc_transport_stream_op_batch op_
grpc_call_element * call_elem(size_t idx)
absl::Status InitParent(Call *parent, uint32_t propagation_mask)
absl::string_view StringViewFromSlice(const grpc_slice &slice)
GPRAPI void gpr_free(void *ptr)
grpc_transport_stream_op_batch_payload stream_op_payload_
absl::optional< grpc_core::SliceBuffer > grpc_message
@ GRPC_CALL_ERROR_COMPLETION_QUEUE_SHUTDOWN
#define gpr_atm_rel_cas(p, o, n)
static void Append(State *state, const char *const str, const int length)
GPRAPI void * gpr_malloc(size_t size)
void SetCompletionQueue(grpc_completion_queue *cq) override
void MaybeUnpublishFromParent()
OPENSSL_EXPORT pem_password_cb void * u
GRPCAPI char * grpc_channel_get_target(grpc_channel *channel)
virtual uint32_t test_only_encodings_accepted_by_peer()=0
bool completed_batch_step()
bool grpc_call_is_trailers_only(const grpc_call *call)
void grpc_cq_end_op(grpc_completion_queue *cq, void *tag, grpc_error_handle error, void(*done)(void *done_arg, grpc_cq_completion *storage), void *done_arg, grpc_cq_completion *storage, bool internal)
grpc_metadata_batch * send_initial_metadata
CallCombiner call_combiner_
grpc_error_handle grpc_call_stack_init(grpc_channel_stack *channel_stack, int initial_refs, grpc_iomgr_cb_func destroy, void *destroy_arg, const grpc_call_element_args *elem_args)
#define GRPC_LOG_IF_ERROR(what, error)
union grpc_core::FilterStackCall::BatchControl::@33 completion_data_
grpc_call_element * grpc_call_stack_element(grpc_call_stack *call_stack, size_t index)
void set_send_deadline(Timestamp send_deadline)
#define GRPC_CLOSURE_CREATE(cb, cb_arg, scheduler)
#define GRPC_ERROR_CANCELLED
@ GRPC_CALL_ERROR_INVALID_METADATA
void set(grpc_error_handle error)
std::atomic< ParentCall * > parent_call_
@ GRPC_CALL_ERROR_NOT_ON_SERVER
grpc_call_stack * call_stack() override
grpc_compression_algorithm test_only_compression_algorithm() override
grpc_metadata_array * buffered_metadata_[2]
static constexpr size_t kMaxConcurrentBatches
#define GRPC_TRACE_FLAG_ENABLED(f)
virtual void SetCompletionQueue(grpc_completion_queue *cq)=0
#define GRPC_CALL_LOG_OP(sev, elem, op)
BatchControl * ReuseOrAllocateBatchControl(const grpc_op *ops)
struct grpc_op::grpc_op_data::grpc_op_recv_message recv_message
grpc_core::TraceFlag grpc_call_error_trace(false, "call_error")
RefCountedPtr< Channel > channel_
grpc_error_handle grpc_error_set_str(grpc_error_handle src, grpc_error_strs which, absl::string_view str)
union grpc_op::grpc_op_data data
void Cancel(grpc_error_handle error)
Indicates that the call has been cancelled.
grpc_byte_buffer ** receiving_buffer_
void SetFinalStatus(grpc_error_handle error)
grpc_call_error grpc_call_start_batch(grpc_call *call, const grpc_op *ops, size_t nops, void *tag, void *reserved)
bool sent_initial_metadata_
void * ContextGet(grpc_context_index elem) const override
grpc_call_stack * grpc_call_get_call_stack(grpc_call *call)
void ExternalUnref() override
ParentCall * GetOrCreateParentCall()
grpc_call_error grpc_call_cancel_with_status(grpc_call *c, grpc_status_code status, const char *description, void *reserved)
struct grpc_byte_buffer ** recv_message
#define GPR_ROUND_UP_TO_ALIGNMENT_SIZE(x)
Given a size, round up to the next multiple of sizeof(void*).
#define GRPC_CALL_STACK_UNREF(call_stack, reason)
grpc_error_handle grpc_error_add_child(grpc_error_handle src, grpc_error_handle child)
grpc_polling_entity pollent_
void HandleCompressionAlgorithmDisabled(grpc_compression_algorithm compression_algorithm) GPR_ATTRIBUTE_NOINLINE
static std::pair< Arena *, void * > CreateWithAlloc(size_t initial_size, size_t alloc_size, MemoryAllocator *memory_allocator)
grpc_handler_private_op_data handler_private
wrapped_grpc_channel * channel
#define GRPC_STATS_INC_CLIENT_CALLS_CREATED()
void Clear()
Removes and unrefs all slices in the SliceBuffer.
int grpc_call_failed_before_recv_message(const grpc_call *c)
@ GRPC_OP_RECV_INITIAL_METADATA
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
@ GRPC_CALL_ERROR_NOT_INVOKED
grpc_transport_stream_stats transport_stream_stats
GPRAPI void * gpr_realloc(void *p, size_t size)
void ReceivingInitialMetadataReady(grpc_error_handle error)
@ GRPC_OP_SEND_STATUS_FROM_SERVER
size_t grpc_call_get_initial_size_estimate()
grpc_pollset_set * grpc_polling_entity_pollset_set(grpc_polling_entity *pollent)
constexpr bool has_value() const noexcept
def c_str(s, encoding='ascii')
@ GRPC_CALL_ERROR_INVALID_FLAGS
static void * tag(intptr_t t)
GRPCAPI int grpc_compression_algorithm_name(grpc_compression_algorithm algorithm, const char **name)
bool IsSet(grpc_compression_algorithm algorithm) const
grpc_slice_buffer * c_slice_buffer()
Return a pointer to the back raw grpc_slice_buffer.
grpc_call_error grpc_call_cancel(grpc_call *call, void *reserved)
const char ** error_string
virtual void ExternalRef()=0
void PublishToParent(Call *parent)
void CancelWithStatus(grpc_status_code status, const char *description)
void ValidateFilteredMetadata()
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
grpc_closure release_call_
grpc_polling_entity grpc_polling_entity_create_from_pollset(grpc_pollset *pollset)
Status UnknownError(absl::string_view message)
void ReceivingTrailingMetadataReady(grpc_error_handle error)
struct grpc_call grpc_call
#define gpr_atm_acq_load(p)
grpc_metadata_batch send_initial_metadata_
grpc_error * grpc_error_handle
grpc_compression_algorithm grpc_call_test_only_get_compression_algorithm(grpc_call *call)
grpc_pollset * grpc_cq_pollset(grpc_completion_queue *cq)
grpc_completion_queue * cq_
#define GRPC_CALL_COMBINER_STOP(call_combiner, reason)
#define GRPC_PROPAGATE_CENSUS_STATS_CONTEXT
@ GRPC_COMPRESS_LEVEL_NONE
FilterStackCall(Arena *arena, const grpc_call_create_args &args)
void RecordCallSucceeded()
grpc_transport_stream_op_batch_payload * payload
grpc_metadata * trailing_metadata
grpc_metadata_batch * send_trailing_metadata
void HandleCompressionAlgorithmNotAccepted(grpc_compression_algorithm compression_algorithm) GPR_ATTRIBUTE_NOINLINE
GPRAPI grpc_slice grpc_empty_slice(void)
#define gpr_atm_rel_store(p, value)
#define GRPC_WRITE_USED_MASK
@ GRPC_ERROR_STR_GRPC_MESSAGE
grpc status message associated with this error
void grpc_call_stack_destroy(grpc_call_stack *stack, const grpc_call_final_info *final_info, grpc_closure *then_schedule_closure)
ParentCall * parent_call()
static void DestroyCall(void *call, grpc_error_handle)
const char * grpc_call_error_to_string(grpc_call_error error)
absl::string_view as_string_view() const
#define GRPC_STATS_INC_CALL_INITIAL_SIZE(value)
void RecvInitialFilter(grpc_metadata_batch *b)
absl::string_view ToString() const
grpc_closure finish_batch_
#define gpr_atm_no_barrier_cas(p, o, n)
virtual bool is_trailers_only() const =0
grpc_transport_stream_op_batch * batch
_W64 unsigned int uintptr_t
uint32_t grpc_call_test_only_get_message_flags(grpc_call *call)
bool is_trailers_only() const override
#define GRPC_CALL_COMBINER_START(call_combiner, closure, error, reason)
@ GRPC_CONTEXT_TRACING
Value is a census_context.
void ContextSet(grpc_context_index elem, void *value, void(*destroy)(void *value)) override
grpc_core::Arena * grpc_call_get_arena(grpc_call *call)
grpc_compression_algorithm grpc_call_compression_for_level(grpc_call *call, grpc_compression_level level)
bool grpc_polling_entity_is_empty(const grpc_polling_entity *pollent)
ValueType
Type of the value held by a Value object.
Call *first_child ABSL_GUARDED_BY(child_list_mu)
void ReceivingStreamReady(grpc_error_handle error)
#define GRPC_ERROR_CREATE_FROM_STATIC_STRING(desc)
void RecordCallSucceeded()
#define GRPC_SLICE_LENGTH(slice)
const char * error_string
grpc_slice * status_details
grpc_metadata_array *const dest_
grpc_cq_completion cq_completion
union grpc_byte_buffer::grpc_byte_buffer_data data
void grpc_call_ref(grpc_call *c)
grpc_call_context_element context_[GRPC_CONTEXT_COUNT]
static Slice FromInt64(int64_t i)
grpc_transport_stream_op_batch * grpc_make_transport_stream_op(grpc_closure *on_complete)
gpr_cycle_counter start_time_
virtual void InternalRef(const char *reason)=0
CompressionAlgorithmSet encodings_accepted_by_peer_
bool recv_initial_metadata
#define GRPC_STATS_INC_SERVER_CALLS_CREATED()
struct grpc_op::grpc_op_data::grpc_op_recv_close_on_server recv_close_on_server
@ GRPC_CALL_ERROR_ALREADY_ACCEPTED
virtual void ExternalUnref()=0
uint8_t grpc_call_is_client(grpc_call *call)
bool grpc_cq_begin_op(grpc_completion_queue *cq, void *tag)
bool send_trailing_metadata
grpc_closure receiving_stream_ready_
grpc_slice * status_details
grpc_compression_algorithm compression_for_level(grpc_compression_level level) override
#define GRPC_ERROR_REF(err)
#define GRPC_WRITE_INTERNAL_COMPRESS
grpc_error_handle absl_status_to_grpc_error(absl::Status status)
void * grpc_call_context_get(grpc_call *call, grpc_context_index elem)
struct grpc_op::grpc_op_data::grpc_op_send_status_from_server send_status_from_server
void grpc_call_context_set(grpc_call *call, grpc_context_index elem, void *value, void(*destroy)(void *value))
#define GRPC_WRITE_INTERNAL_USED_MASK
@ GRPC_CALL_ERROR_PAYLOAD_TYPE_MISMATCH
grpc_error_handle grpc_error_set_int(grpc_error_handle src, grpc_error_ints which, intptr_t value)
virtual bool failed_before_recv_message() const =0
virtual grpc_compression_algorithm test_only_compression_algorithm()=0
@ GRPC_OP_SEND_INITIAL_METADATA
CallCombiner * call_combiner()
static Call * FromTopElem(grpc_call_element *elem)
grpc_core::ExecCtx exec_ctx
std::string grpc_error_std_string(grpc_error_handle error)
struct grpc_op::grpc_op_data::grpc_op_send_message send_message
grpc_metadata_batch recv_initial_metadata_
gpr_timespec gpr_cycle_counter_sub(gpr_cycle_counter a, gpr_cycle_counter b)
static grpc_error_handle Create(grpc_call_create_args *args, grpc_call **out_call)
char * grpc_call_get_peer(grpc_call *call)
SliceBuffer send_slice_buffer_
#define GRPC_ERROR_CREATE_FROM_CPP_STRING(desc)
grpc_compression_algorithm compression
#define GRPC_PROPAGATE_CENSUS_TRACING_CONTEXT
@ GRPC_CALL_ERROR_BATCH_TOO_BIG
struct grpc_op::grpc_op_data::grpc_op_recv_status_on_client recv_status_on_client
size_t trailing_metadata_count
bool sent_server_trailing_metadata_
struct grpc_core::FilterStackCall::@32::@36 server
grpc_core::SliceBuffer * send_message
virtual grpc_call_error StartBatch(const grpc_op *ops, size_t nops, void *notify_tag, bool is_notify_tag_closure)=0
#define GRPC_CQ_INTERNAL_UNREF(cq, reason)
grpc_metadata_batch * recv_initial_metadata
gpr_atm cancelled_with_error_
GRPCAPI void grpc_byte_buffer_destroy(grpc_byte_buffer *bb)
uint32_t test_only_encodings_accepted_by_peer() override
uint32_t test_only_last_message_flags_
void FinishBatch(grpc_error_handle error)
bool Completed() override
bool send_initial_metadata
virtual void CancelWithError(grpc_error_handle error)=0
absl::optional< grpc_core::SliceBuffer > * recv_message
union grpc_core::FilterStackCall::@32 final_op_
uint32_t grpc_call_test_only_get_encodings_accepted_by_peer(grpc_call *call)
grpc_slice grpc_slice_from_cpp_string(std::string str)
bool ok()
returns get() == GRPC_ERROR_NONE
void * Alloc(size_t size)
AtomicError status_error_
grpc_call_final_info final_info_
#define GRPC_CQ_INTERNAL_REF(cq, reason)
#define GRPC_ERROR_UNREF(err)
grpc_closure receiving_trailing_metadata_ready_
virtual uint32_t test_only_message_flags()=0
grpc_slice_buffer slice_buffer
@ GRPC_OP_RECV_CLOSE_ON_SERVER
absl::string_view grpc_call_server_authority(const grpc_call *call)
@ GRPC_STATUS_UNIMPLEMENTED
grpc_slice receiving_slice_
grpc_metadata_batch recv_trailing_metadata_
bool recv_trailing_metadata
void PublishAppMetadata(grpc_metadata_batch *b, bool is_trailing)
static CompressionAlgorithmSet FromUint32(uint32_t value)
grpc_closure finish_batch
GPRAPI char * gpr_strdup(const char *src)
@ GRPC_CALL_ERROR_ALREADY_FINISHED
void InternalUnref(const char *reason) override
virtual void ContextSet(grpc_context_index elem, void *value, void(*destroy)(void *value))=0
void grpc_error_get_status(grpc_error_handle error, grpc_core::Timestamp deadline, grpc_status_code *code, std::string *message, grpc_http2_error_code *http_error, const char **error_string)
grpc_metadata_batch send_trailing_metadata_
grpc_call_error grpc_call_start_batch_and_execute(grpc_call *call, const grpc_op *ops, size_t nops, grpc_closure *closure)
void InternalRef(const char *reason) override
static constexpr Timestamp InfFuture()
struct grpc_op::grpc_op_data::grpc_op_recv_initial_metadata recv_initial_metadata
grpc_metadata_batch * recv_trailing_metadata
grpc_slice * status_details
#define GRPC_PROPAGATE_DEADLINE
grpc_closure receiving_initial_metadata_ready_
static constexpr gpr_atm kRecvNone
virtual bool Completed()=0
void set_num_steps_to_complete(uintptr_t steps)
grpc_polling_entity grpc_polling_entity_create_from_pollset_set(grpc_pollset_set *pollset_set)
void RecvTrailingFilter(grpc_metadata_batch *b, grpc_error_handle batch_error)
@ GRPC_OP_RECV_STATUS_ON_CLIENT
#define GRPC_CALL_STACK_REF(call_stack, reason)
BatchControl * active_batches_[kMaxConcurrentBatches]
void CancelWithError(grpc_error_handle error) override
void ProcessDataAfterMetadata()
internal::RefMatcher< T & > Ref(T &x)
static Call * FromC(grpc_call *c_type)
static constexpr gpr_atm kRecvInitialMetadataFirst
GPRAPI int grpc_slice_str_cmp(grpc_slice a, const char *b)
grpc_context_index
Call object context pointers.
uint32_t ToLegacyBitmask() const
virtual void * ContextGet(grpc_context_index elem) const =0
void grpc_call_unref(grpc_call *c)
virtual grpc_call_stack * call_stack()=0
bool call_failed_before_recv_message_
@ GRPC_CALL_ERROR_NOT_SERVER_COMPLETION_QUEUE
grpc_call * grpc_call_from_top_element(grpc_call_element *surface_element)
bool failed_before_recv_message() const override
static FilterStackCall * FromCallStack(grpc_call_stack *call_stack)
static void Run(const DebugLocation &location, grpc_closure *closure, grpc_error_handle error)
grpc_call_error StartBatch(const grpc_op *ops, size_t nops, void *notify_tag, bool is_notify_tag_closure) override
Timestamp send_deadline() const
static grpc_completion_queue * cq
virtual grpc_compression_algorithm compression_for_level(grpc_compression_level level)=0
uint32_t test_only_message_flags() override
static std::function< void(void *, Slot *)> destroy
#define GRPC_INITIAL_METADATA_USED_MASK
@ GRPC_OP_SEND_CLOSE_FROM_CLIENT
@ GRPC_ERROR_INT_GRPC_STATUS
grpc status code representing this error
grpc_closure start_batch_
static struct rpc_state state
#define GRPC_API_TRACE(fmt, nargs, args)
void grpc_slice_unref_internal(const grpc_slice &slice)
struct grpc_core::FilterStackCall::@32::@35 client
void ExecuteBatch(grpc_transport_stream_op_batch *batch, grpc_closure *start_batch_closure)
#define GRPC_ERROR_IS_NONE(err)
GPRAPI grpc_slice grpc_slice_copy(grpc_slice s)
#define GRPC_PROPAGATE_CANCELLATION
void grpc_call_cancel_internal(grpc_call *call)
static size_t InitialSizeEstimate()
grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:58:42