GRPC Core  9.0.0
Data Structures | Namespaces | Macros | Typedefs | Enumerations | Functions
internal.h File Reference
#include <grpc/support/port_platform.h>
#include <assert.h>
#include <stdbool.h>
#include "src/core/ext/transport/chttp2/transport/flow_control.h"
#include "src/core/ext/transport/chttp2/transport/frame.h"
#include "src/core/ext/transport/chttp2/transport/frame_data.h"
#include "src/core/ext/transport/chttp2/transport/frame_goaway.h"
#include "src/core/ext/transport/chttp2/transport/frame_ping.h"
#include "src/core/ext/transport/chttp2/transport/frame_rst_stream.h"
#include "src/core/ext/transport/chttp2/transport/frame_settings.h"
#include "src/core/ext/transport/chttp2/transport/frame_window_update.h"
#include "src/core/ext/transport/chttp2/transport/hpack_encoder.h"
#include "src/core/ext/transport/chttp2/transport/hpack_parser.h"
#include "src/core/ext/transport/chttp2/transport/incoming_metadata.h"
#include "src/core/ext/transport/chttp2/transport/stream_map.h"
#include "src/core/lib/channel/channelz.h"
#include "src/core/lib/compression/stream_compression.h"
#include "src/core/lib/gprpp/manual_constructor.h"
#include "src/core/lib/iomgr/combiner.h"
#include "src/core/lib/iomgr/endpoint.h"
#include "src/core/lib/iomgr/timer.h"
#include "src/core/lib/transport/connectivity_state.h"
#include "src/core/lib/transport/transport_impl.h"

Go to the source code of this file.

Data Structures

struct  grpc_chttp2_ping_queue
 
struct  grpc_chttp2_repeated_ping_policy
 
struct  grpc_chttp2_repeated_ping_state
 
struct  grpc_chttp2_server_ping_recv_state
 
struct  grpc_chttp2_stream_list
 
struct  grpc_chttp2_stream_link
 
struct  grpc_chttp2_write_cb
 
class  grpc_core::Chttp2IncomingByteStream
 
struct  grpc_chttp2_transport
 
struct  grpc_chttp2_stream
 
struct  grpc_chttp2_stream::Reffer
 
struct  grpc_chttp2_begin_write_result
 

Namespaces

 grpc_core
 Round Robin Policy.
 

Macros

#define GRPC_HEADER_SIZE_IN_BYTES   5
 
#define MAX_SIZE_T   (~(size_t)0)
 
#define GRPC_CHTTP2_CLIENT_CONNECT_STRING   "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"
 
#define GRPC_CHTTP2_CLIENT_CONNECT_STRLEN   (sizeof(GRPC_CHTTP2_CLIENT_CONNECT_STRING) - 1)
 
#define GRPC_CHTTP2_IF_TRACING(stmt)
 
#define GRPC_CHTTP2_STREAM_REF(stream, reason)   grpc_chttp2_stream_ref(stream, reason)
 
#define GRPC_CHTTP2_STREAM_UNREF(stream, reason)   grpc_chttp2_stream_unref(stream, reason)
 
#define GRPC_CHTTP2_REF_TRANSPORT(t, r)   grpc_chttp2_ref_transport(t, r, __FILE__, __LINE__)
 
#define GRPC_CHTTP2_UNREF_TRANSPORT(t, r)   grpc_chttp2_unref_transport(t, r, __FILE__, __LINE__)
 

Typedefs

typedef struct grpc_chttp2_write_cb grpc_chttp2_write_cb
 

Enumerations

enum  grpc_chttp2_stream_list_id {
  GRPC_CHTTP2_LIST_WRITABLE, GRPC_CHTTP2_LIST_WRITING, GRPC_CHTTP2_LIST_STALLED_BY_TRANSPORT, GRPC_CHTTP2_LIST_STALLED_BY_STREAM,
  GRPC_CHTTP2_LIST_WAITING_FOR_CONCURRENCY, STREAM_LIST_COUNT
}
 
enum  grpc_chttp2_write_state { GRPC_CHTTP2_WRITE_STATE_IDLE, GRPC_CHTTP2_WRITE_STATE_WRITING, GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE }
 
enum  grpc_chttp2_optimization_target { GRPC_CHTTP2_OPTIMIZE_FOR_LATENCY, GRPC_CHTTP2_OPTIMIZE_FOR_THROUGHPUT }
 
enum  grpc_chttp2_ping_closure_list { GRPC_CHTTP2_PCL_INITIATE = 0, GRPC_CHTTP2_PCL_NEXT, GRPC_CHTTP2_PCL_INFLIGHT, GRPC_CHTTP2_PCL_COUNT }
 
enum  grpc_chttp2_initiate_write_reason {
  GRPC_CHTTP2_INITIATE_WRITE_INITIAL_WRITE, GRPC_CHTTP2_INITIATE_WRITE_START_NEW_STREAM, GRPC_CHTTP2_INITIATE_WRITE_SEND_MESSAGE, GRPC_CHTTP2_INITIATE_WRITE_SEND_INITIAL_METADATA,
  GRPC_CHTTP2_INITIATE_WRITE_SEND_TRAILING_METADATA, GRPC_CHTTP2_INITIATE_WRITE_RETRY_SEND_PING, GRPC_CHTTP2_INITIATE_WRITE_CONTINUE_PINGS, GRPC_CHTTP2_INITIATE_WRITE_GOAWAY_SENT,
  GRPC_CHTTP2_INITIATE_WRITE_RST_STREAM, GRPC_CHTTP2_INITIATE_WRITE_CLOSE_FROM_API, GRPC_CHTTP2_INITIATE_WRITE_STREAM_FLOW_CONTROL, GRPC_CHTTP2_INITIATE_WRITE_TRANSPORT_FLOW_CONTROL,
  GRPC_CHTTP2_INITIATE_WRITE_SEND_SETTINGS, GRPC_CHTTP2_INITIATE_WRITE_FLOW_CONTROL_UNSTALLED_BY_SETTING, GRPC_CHTTP2_INITIATE_WRITE_FLOW_CONTROL_UNSTALLED_BY_UPDATE, GRPC_CHTTP2_INITIATE_WRITE_APPLICATION_PING,
  GRPC_CHTTP2_INITIATE_WRITE_KEEPALIVE_PING, GRPC_CHTTP2_INITIATE_WRITE_TRANSPORT_FLOW_CONTROL_UNSTALLED, GRPC_CHTTP2_INITIATE_WRITE_PING_RESPONSE, GRPC_CHTTP2_INITIATE_WRITE_FORCE_RST_STREAM
}
 
enum  grpc_chttp2_deframe_transport_state {
  GRPC_DTS_CLIENT_PREFIX_0 = 0, GRPC_DTS_CLIENT_PREFIX_1, GRPC_DTS_CLIENT_PREFIX_2, GRPC_DTS_CLIENT_PREFIX_3,
  GRPC_DTS_CLIENT_PREFIX_4, GRPC_DTS_CLIENT_PREFIX_5, GRPC_DTS_CLIENT_PREFIX_6, GRPC_DTS_CLIENT_PREFIX_7,
  GRPC_DTS_CLIENT_PREFIX_8, GRPC_DTS_CLIENT_PREFIX_9, GRPC_DTS_CLIENT_PREFIX_10, GRPC_DTS_CLIENT_PREFIX_11,
  GRPC_DTS_CLIENT_PREFIX_12, GRPC_DTS_CLIENT_PREFIX_13, GRPC_DTS_CLIENT_PREFIX_14, GRPC_DTS_CLIENT_PREFIX_15,
  GRPC_DTS_CLIENT_PREFIX_16, GRPC_DTS_CLIENT_PREFIX_17, GRPC_DTS_CLIENT_PREFIX_18, GRPC_DTS_CLIENT_PREFIX_19,
  GRPC_DTS_CLIENT_PREFIX_20, GRPC_DTS_CLIENT_PREFIX_21, GRPC_DTS_CLIENT_PREFIX_22, GRPC_DTS_CLIENT_PREFIX_23,
  GRPC_DTS_FH_0, GRPC_DTS_FH_1, GRPC_DTS_FH_2, GRPC_DTS_FH_3,
  GRPC_DTS_FH_4, GRPC_DTS_FH_5, GRPC_DTS_FH_6, GRPC_DTS_FH_7,
  GRPC_DTS_FH_8, GRPC_DTS_FRAME
}
 
enum  grpc_chttp2_setting_set {
  GRPC_PEER_SETTINGS = 0, GRPC_LOCAL_SETTINGS, GRPC_SENT_SETTINGS, GRPC_ACKED_SETTINGS,
  GRPC_NUM_SETTING_SETS
}
 
enum  grpc_chttp2_sent_goaway_state { GRPC_CHTTP2_NO_GOAWAY_SEND, GRPC_CHTTP2_GOAWAY_SEND_SCHEDULED, GRPC_CHTTP2_GOAWAY_SENT }
 
enum  grpc_chttp2_keepalive_state { GRPC_CHTTP2_KEEPALIVE_STATE_WAITING, GRPC_CHTTP2_KEEPALIVE_STATE_PINGING, GRPC_CHTTP2_KEEPALIVE_STATE_DYING, GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED }
 
enum  grpc_published_metadata_method { GRPC_METADATA_NOT_PUBLISHED, GRPC_METADATA_SYNTHESIZED_FROM_FAKE, GRPC_METADATA_PUBLISHED_FROM_WIRE, GRPC_METADATA_PUBLISHED_AT_CLOSE }
 

Functions

const char * grpc_chttp2_initiate_write_reason_string (grpc_chttp2_initiate_write_reason reason)
 
void grpc_chttp2_initiate_write (grpc_chttp2_transport *t, grpc_chttp2_initiate_write_reason reason)
 Transport writing call flow: grpc_chttp2_initiate_write() is called anywhere that we know bytes need to go out on the wire. More...
 
grpc_chttp2_begin_write_result grpc_chttp2_begin_write (grpc_chttp2_transport *t)
 
void grpc_chttp2_end_write (grpc_chttp2_transport *t, grpc_error *error)
 
grpc_errorgrpc_chttp2_perform_read (grpc_chttp2_transport *t, const grpc_slice &slice)
 Process one slice of incoming data; return 1 if the connection is still viable after reading, or 0 if the connection should be torn down. More...
 
bool grpc_chttp2_list_add_writable_stream (grpc_chttp2_transport *t, grpc_chttp2_stream *s)
 
bool grpc_chttp2_list_pop_writable_stream (grpc_chttp2_transport *t, grpc_chttp2_stream **s)
 Get a writable stream returns non-zero if there was a stream available. More...
 
bool grpc_chttp2_list_remove_writable_stream (grpc_chttp2_transport *t, grpc_chttp2_stream *s)
 
bool grpc_chttp2_list_add_writing_stream (grpc_chttp2_transport *t, grpc_chttp2_stream *s)
 
bool grpc_chttp2_list_have_writing_streams (grpc_chttp2_transport *t)
 
bool grpc_chttp2_list_pop_writing_stream (grpc_chttp2_transport *t, grpc_chttp2_stream **s)
 
void grpc_chttp2_list_add_written_stream (grpc_chttp2_transport *t, grpc_chttp2_stream *s)
 
bool grpc_chttp2_list_pop_written_stream (grpc_chttp2_transport *t, grpc_chttp2_stream **s)
 
void grpc_chttp2_list_add_waiting_for_concurrency (grpc_chttp2_transport *t, grpc_chttp2_stream *s)
 
bool grpc_chttp2_list_pop_waiting_for_concurrency (grpc_chttp2_transport *t, grpc_chttp2_stream **s)
 
void grpc_chttp2_list_remove_waiting_for_concurrency (grpc_chttp2_transport *t, grpc_chttp2_stream *s)
 
void grpc_chttp2_list_add_stalled_by_transport (grpc_chttp2_transport *t, grpc_chttp2_stream *s)
 
bool grpc_chttp2_list_pop_stalled_by_transport (grpc_chttp2_transport *t, grpc_chttp2_stream **s)
 
void grpc_chttp2_list_remove_stalled_by_transport (grpc_chttp2_transport *t, grpc_chttp2_stream *s)
 
void grpc_chttp2_list_add_stalled_by_stream (grpc_chttp2_transport *t, grpc_chttp2_stream *s)
 
bool grpc_chttp2_list_pop_stalled_by_stream (grpc_chttp2_transport *t, grpc_chttp2_stream **s)
 
bool grpc_chttp2_list_remove_stalled_by_stream (grpc_chttp2_transport *t, grpc_chttp2_stream *s)
 
void grpc_chttp2_act_on_flowctl_action (const grpc_core::chttp2::FlowControlAction &action, grpc_chttp2_transport *t, grpc_chttp2_stream *s)
 
grpc_chttp2_streamgrpc_chttp2_parsing_lookup_stream (grpc_chttp2_transport *t, uint32_t id)
 
grpc_chttp2_streamgrpc_chttp2_parsing_accept_stream (grpc_chttp2_transport *t, uint32_t id)
 
void grpc_chttp2_add_incoming_goaway (grpc_chttp2_transport *t, uint32_t goaway_error, uint32_t last_stream_id, const grpc_slice &goaway_text)
 
void grpc_chttp2_parsing_become_skip_parser (grpc_chttp2_transport *t)
 
void grpc_chttp2_complete_closure_step (grpc_chttp2_transport *t, grpc_chttp2_stream *s, grpc_closure **pclosure, grpc_error *error, const char *desc)
 
void grpc_chttp2_fake_status (grpc_chttp2_transport *t, grpc_chttp2_stream *stream, grpc_error *error)
 
void grpc_chttp2_mark_stream_closed (grpc_chttp2_transport *t, grpc_chttp2_stream *s, int close_reads, int close_writes, grpc_error *error)
 
void grpc_chttp2_start_writing (grpc_chttp2_transport *t)
 
void grpc_chttp2_stream_ref (grpc_chttp2_stream *s, const char *reason)
 
void grpc_chttp2_stream_unref (grpc_chttp2_stream *s, const char *reason)
 
void grpc_chttp2_unref_transport (grpc_chttp2_transport *t, const char *reason, const char *file, int line)
 
void grpc_chttp2_ref_transport (grpc_chttp2_transport *t, const char *reason, const char *file, int line)
 
void grpc_chttp2_ack_ping (grpc_chttp2_transport *t, uint64_t id)
 
void grpc_chttp2_add_ping_strike (grpc_chttp2_transport *t)
 Add a new ping strike to ping_recv_state.ping_strikes. More...
 
void grpc_chttp2_mark_stream_writable (grpc_chttp2_transport *t, grpc_chttp2_stream *s)
 add a ref to the stream and add it to the writable list; ref will be dropped in writing.c More...
 
void grpc_chttp2_cancel_stream (grpc_chttp2_transport *t, grpc_chttp2_stream *s, grpc_error *due_to_error)
 
void grpc_chttp2_maybe_complete_recv_initial_metadata (grpc_chttp2_transport *t, grpc_chttp2_stream *s)
 
void grpc_chttp2_maybe_complete_recv_message (grpc_chttp2_transport *t, grpc_chttp2_stream *s)
 
void grpc_chttp2_maybe_complete_recv_trailing_metadata (grpc_chttp2_transport *t, grpc_chttp2_stream *s)
 
void grpc_chttp2_fail_pending_writes (grpc_chttp2_transport *t, grpc_chttp2_stream *s, grpc_error *error)
 
void grpc_chttp2_config_default_keepalive_args (grpc_channel_args *args, bool is_client)
 Set the default keepalive configurations, must only be called at initialization. More...
 
void grpc_chttp2_retry_initiate_ping (void *tp, grpc_error *error)
 

Macro Definition Documentation

◆ GRPC_CHTTP2_CLIENT_CONNECT_STRING

#define GRPC_CHTTP2_CLIENT_CONNECT_STRING   "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"

◆ GRPC_CHTTP2_CLIENT_CONNECT_STRLEN

#define GRPC_CHTTP2_CLIENT_CONNECT_STRLEN   (sizeof(GRPC_CHTTP2_CLIENT_CONNECT_STRING) - 1)

◆ GRPC_CHTTP2_IF_TRACING

#define GRPC_CHTTP2_IF_TRACING (   stmt)
Value:
do { \
(stmt); \
} \
} while (0)
grpc_core::TraceFlag grpc_http_trace(false, "http")
#define GRPC_TRACE_FLAG_ENABLED(f)
Definition: trace.h:112

◆ GRPC_CHTTP2_REF_TRANSPORT

#define GRPC_CHTTP2_REF_TRANSPORT (   t,
 
)    grpc_chttp2_ref_transport(t, r, __FILE__, __LINE__)

◆ GRPC_CHTTP2_STREAM_REF

#define GRPC_CHTTP2_STREAM_REF (   stream,
  reason 
)    grpc_chttp2_stream_ref(stream, reason)

◆ GRPC_CHTTP2_STREAM_UNREF

#define GRPC_CHTTP2_STREAM_UNREF (   stream,
  reason 
)    grpc_chttp2_stream_unref(stream, reason)

◆ GRPC_CHTTP2_UNREF_TRANSPORT

#define GRPC_CHTTP2_UNREF_TRANSPORT (   t,
 
)    grpc_chttp2_unref_transport(t, r, __FILE__, __LINE__)

◆ GRPC_HEADER_SIZE_IN_BYTES

#define GRPC_HEADER_SIZE_IN_BYTES   5

◆ MAX_SIZE_T

#define MAX_SIZE_T   (~(size_t)0)

Typedef Documentation

◆ grpc_chttp2_write_cb

Enumeration Type Documentation

◆ grpc_chttp2_deframe_transport_state

Enumerator
GRPC_DTS_CLIENT_PREFIX_0 
GRPC_DTS_CLIENT_PREFIX_1 
GRPC_DTS_CLIENT_PREFIX_2 
GRPC_DTS_CLIENT_PREFIX_3 
GRPC_DTS_CLIENT_PREFIX_4 
GRPC_DTS_CLIENT_PREFIX_5 
GRPC_DTS_CLIENT_PREFIX_6 
GRPC_DTS_CLIENT_PREFIX_7 
GRPC_DTS_CLIENT_PREFIX_8 
GRPC_DTS_CLIENT_PREFIX_9 
GRPC_DTS_CLIENT_PREFIX_10 
GRPC_DTS_CLIENT_PREFIX_11 
GRPC_DTS_CLIENT_PREFIX_12 
GRPC_DTS_CLIENT_PREFIX_13 
GRPC_DTS_CLIENT_PREFIX_14 
GRPC_DTS_CLIENT_PREFIX_15 
GRPC_DTS_CLIENT_PREFIX_16 
GRPC_DTS_CLIENT_PREFIX_17 
GRPC_DTS_CLIENT_PREFIX_18 
GRPC_DTS_CLIENT_PREFIX_19 
GRPC_DTS_CLIENT_PREFIX_20 
GRPC_DTS_CLIENT_PREFIX_21 
GRPC_DTS_CLIENT_PREFIX_22 
GRPC_DTS_CLIENT_PREFIX_23 
GRPC_DTS_FH_0 
GRPC_DTS_FH_1 
GRPC_DTS_FH_2 
GRPC_DTS_FH_3 
GRPC_DTS_FH_4 
GRPC_DTS_FH_5 
GRPC_DTS_FH_6 
GRPC_DTS_FH_7 
GRPC_DTS_FH_8 
GRPC_DTS_FRAME 

◆ grpc_chttp2_initiate_write_reason

Enumerator
GRPC_CHTTP2_INITIATE_WRITE_INITIAL_WRITE 
GRPC_CHTTP2_INITIATE_WRITE_START_NEW_STREAM 
GRPC_CHTTP2_INITIATE_WRITE_SEND_MESSAGE 
GRPC_CHTTP2_INITIATE_WRITE_SEND_INITIAL_METADATA 
GRPC_CHTTP2_INITIATE_WRITE_SEND_TRAILING_METADATA 
GRPC_CHTTP2_INITIATE_WRITE_RETRY_SEND_PING 
GRPC_CHTTP2_INITIATE_WRITE_CONTINUE_PINGS 
GRPC_CHTTP2_INITIATE_WRITE_GOAWAY_SENT 
GRPC_CHTTP2_INITIATE_WRITE_RST_STREAM 
GRPC_CHTTP2_INITIATE_WRITE_CLOSE_FROM_API 
GRPC_CHTTP2_INITIATE_WRITE_STREAM_FLOW_CONTROL 
GRPC_CHTTP2_INITIATE_WRITE_TRANSPORT_FLOW_CONTROL 
GRPC_CHTTP2_INITIATE_WRITE_SEND_SETTINGS 
GRPC_CHTTP2_INITIATE_WRITE_FLOW_CONTROL_UNSTALLED_BY_SETTING 
GRPC_CHTTP2_INITIATE_WRITE_FLOW_CONTROL_UNSTALLED_BY_UPDATE 
GRPC_CHTTP2_INITIATE_WRITE_APPLICATION_PING 
GRPC_CHTTP2_INITIATE_WRITE_KEEPALIVE_PING 
GRPC_CHTTP2_INITIATE_WRITE_TRANSPORT_FLOW_CONTROL_UNSTALLED 
GRPC_CHTTP2_INITIATE_WRITE_PING_RESPONSE 
GRPC_CHTTP2_INITIATE_WRITE_FORCE_RST_STREAM 

◆ grpc_chttp2_keepalive_state

Enumerator
GRPC_CHTTP2_KEEPALIVE_STATE_WAITING 
GRPC_CHTTP2_KEEPALIVE_STATE_PINGING 
GRPC_CHTTP2_KEEPALIVE_STATE_DYING 
GRPC_CHTTP2_KEEPALIVE_STATE_DISABLED 

◆ grpc_chttp2_optimization_target

Enumerator
GRPC_CHTTP2_OPTIMIZE_FOR_LATENCY 
GRPC_CHTTP2_OPTIMIZE_FOR_THROUGHPUT 

◆ grpc_chttp2_ping_closure_list

Enumerator
GRPC_CHTTP2_PCL_INITIATE 
GRPC_CHTTP2_PCL_NEXT 
GRPC_CHTTP2_PCL_INFLIGHT 
GRPC_CHTTP2_PCL_COUNT 

◆ grpc_chttp2_sent_goaway_state

Enumerator
GRPC_CHTTP2_NO_GOAWAY_SEND 
GRPC_CHTTP2_GOAWAY_SEND_SCHEDULED 
GRPC_CHTTP2_GOAWAY_SENT 

◆ grpc_chttp2_setting_set

Enumerator
GRPC_PEER_SETTINGS 
GRPC_LOCAL_SETTINGS 
GRPC_SENT_SETTINGS 
GRPC_ACKED_SETTINGS 
GRPC_NUM_SETTING_SETS 

◆ grpc_chttp2_stream_list_id

Enumerator
GRPC_CHTTP2_LIST_WRITABLE 
GRPC_CHTTP2_LIST_WRITING 
GRPC_CHTTP2_LIST_STALLED_BY_TRANSPORT 
GRPC_CHTTP2_LIST_STALLED_BY_STREAM 
GRPC_CHTTP2_LIST_WAITING_FOR_CONCURRENCY 

streams that are waiting to start because there are too many concurrent streams on the connection

STREAM_LIST_COUNT 

◆ grpc_chttp2_write_state

Enumerator
GRPC_CHTTP2_WRITE_STATE_IDLE 
GRPC_CHTTP2_WRITE_STATE_WRITING 
GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE 

◆ grpc_published_metadata_method

Enumerator
GRPC_METADATA_NOT_PUBLISHED 
GRPC_METADATA_SYNTHESIZED_FROM_FAKE 
GRPC_METADATA_PUBLISHED_FROM_WIRE 
GRPC_METADATA_PUBLISHED_AT_CLOSE 

Function Documentation

◆ grpc_chttp2_ack_ping()

void grpc_chttp2_ack_ping ( grpc_chttp2_transport t,
uint64_t  id 
)

◆ grpc_chttp2_act_on_flowctl_action()

void grpc_chttp2_act_on_flowctl_action ( const grpc_core::chttp2::FlowControlAction action,
grpc_chttp2_transport t,
grpc_chttp2_stream s 
)

◆ grpc_chttp2_add_incoming_goaway()

void grpc_chttp2_add_incoming_goaway ( grpc_chttp2_transport t,
uint32_t  goaway_error,
uint32_t  last_stream_id,
const grpc_slice goaway_text 
)

◆ grpc_chttp2_add_ping_strike()

void grpc_chttp2_add_ping_strike ( grpc_chttp2_transport t)

Add a new ping strike to ping_recv_state.ping_strikes.

If ping_recv_state.ping_strikes > ping_policy.max_ping_strikes, it sends GOAWAY with error code ENHANCE_YOUR_CALM and additional debug data resembling "too_many_pings" followed by immediately closing the connection.

◆ grpc_chttp2_begin_write()

grpc_chttp2_begin_write_result grpc_chttp2_begin_write ( grpc_chttp2_transport t)

◆ grpc_chttp2_cancel_stream()

void grpc_chttp2_cancel_stream ( grpc_chttp2_transport t,
grpc_chttp2_stream s,
grpc_error due_to_error 
)

◆ grpc_chttp2_complete_closure_step()

void grpc_chttp2_complete_closure_step ( grpc_chttp2_transport t,
grpc_chttp2_stream s,
grpc_closure **  pclosure,
grpc_error error,
const char *  desc 
)

◆ grpc_chttp2_config_default_keepalive_args()

void grpc_chttp2_config_default_keepalive_args ( grpc_channel_args args,
bool  is_client 
)

Set the default keepalive configurations, must only be called at initialization.

◆ grpc_chttp2_end_write()

void grpc_chttp2_end_write ( grpc_chttp2_transport t,
grpc_error error 
)

◆ grpc_chttp2_fail_pending_writes()

void grpc_chttp2_fail_pending_writes ( grpc_chttp2_transport t,
grpc_chttp2_stream s,
grpc_error error 
)

◆ grpc_chttp2_fake_status()

void grpc_chttp2_fake_status ( grpc_chttp2_transport t,
grpc_chttp2_stream stream,
grpc_error error 
)

◆ grpc_chttp2_initiate_write()

void grpc_chttp2_initiate_write ( grpc_chttp2_transport t,
grpc_chttp2_initiate_write_reason  reason 
)

Transport writing call flow: grpc_chttp2_initiate_write() is called anywhere that we know bytes need to go out on the wire.

If no other write has been started, a task is enqueued onto our workqueue. When that task executes, it obtains the global lock, and gathers the data to write. The global lock is dropped and we do the syscall to write. After writing, a follow-up check is made to see if another round of writing should be performed.

The actual call chain is documented in the implementation of this function.

◆ grpc_chttp2_initiate_write_reason_string()

const char* grpc_chttp2_initiate_write_reason_string ( grpc_chttp2_initiate_write_reason  reason)

◆ grpc_chttp2_list_add_stalled_by_stream()

void grpc_chttp2_list_add_stalled_by_stream ( grpc_chttp2_transport t,
grpc_chttp2_stream s 
)

◆ grpc_chttp2_list_add_stalled_by_transport()

void grpc_chttp2_list_add_stalled_by_transport ( grpc_chttp2_transport t,
grpc_chttp2_stream s 
)

◆ grpc_chttp2_list_add_waiting_for_concurrency()

void grpc_chttp2_list_add_waiting_for_concurrency ( grpc_chttp2_transport t,
grpc_chttp2_stream s 
)

◆ grpc_chttp2_list_add_writable_stream()

bool grpc_chttp2_list_add_writable_stream ( grpc_chttp2_transport t,
grpc_chttp2_stream s 
)

◆ grpc_chttp2_list_add_writing_stream()

bool grpc_chttp2_list_add_writing_stream ( grpc_chttp2_transport t,
grpc_chttp2_stream s 
)

◆ grpc_chttp2_list_add_written_stream()

void grpc_chttp2_list_add_written_stream ( grpc_chttp2_transport t,
grpc_chttp2_stream s 
)

◆ grpc_chttp2_list_have_writing_streams()

bool grpc_chttp2_list_have_writing_streams ( grpc_chttp2_transport t)

◆ grpc_chttp2_list_pop_stalled_by_stream()

bool grpc_chttp2_list_pop_stalled_by_stream ( grpc_chttp2_transport t,
grpc_chttp2_stream **  s 
)

◆ grpc_chttp2_list_pop_stalled_by_transport()

bool grpc_chttp2_list_pop_stalled_by_transport ( grpc_chttp2_transport t,
grpc_chttp2_stream **  s 
)

◆ grpc_chttp2_list_pop_waiting_for_concurrency()

bool grpc_chttp2_list_pop_waiting_for_concurrency ( grpc_chttp2_transport t,
grpc_chttp2_stream **  s 
)

◆ grpc_chttp2_list_pop_writable_stream()

bool grpc_chttp2_list_pop_writable_stream ( grpc_chttp2_transport t,
grpc_chttp2_stream **  s 
)

Get a writable stream returns non-zero if there was a stream available.

◆ grpc_chttp2_list_pop_writing_stream()

bool grpc_chttp2_list_pop_writing_stream ( grpc_chttp2_transport t,
grpc_chttp2_stream **  s 
)

◆ grpc_chttp2_list_pop_written_stream()

bool grpc_chttp2_list_pop_written_stream ( grpc_chttp2_transport t,
grpc_chttp2_stream **  s 
)

◆ grpc_chttp2_list_remove_stalled_by_stream()

bool grpc_chttp2_list_remove_stalled_by_stream ( grpc_chttp2_transport t,
grpc_chttp2_stream s 
)

◆ grpc_chttp2_list_remove_stalled_by_transport()

void grpc_chttp2_list_remove_stalled_by_transport ( grpc_chttp2_transport t,
grpc_chttp2_stream s 
)

◆ grpc_chttp2_list_remove_waiting_for_concurrency()

void grpc_chttp2_list_remove_waiting_for_concurrency ( grpc_chttp2_transport t,
grpc_chttp2_stream s 
)

◆ grpc_chttp2_list_remove_writable_stream()

bool grpc_chttp2_list_remove_writable_stream ( grpc_chttp2_transport t,
grpc_chttp2_stream s 
)

◆ grpc_chttp2_mark_stream_closed()

void grpc_chttp2_mark_stream_closed ( grpc_chttp2_transport t,
grpc_chttp2_stream s,
int  close_reads,
int  close_writes,
grpc_error error 
)

◆ grpc_chttp2_mark_stream_writable()

void grpc_chttp2_mark_stream_writable ( grpc_chttp2_transport t,
grpc_chttp2_stream s 
)

add a ref to the stream and add it to the writable list; ref will be dropped in writing.c

◆ grpc_chttp2_maybe_complete_recv_initial_metadata()

void grpc_chttp2_maybe_complete_recv_initial_metadata ( grpc_chttp2_transport t,
grpc_chttp2_stream s 
)

◆ grpc_chttp2_maybe_complete_recv_message()

void grpc_chttp2_maybe_complete_recv_message ( grpc_chttp2_transport t,
grpc_chttp2_stream s 
)

◆ grpc_chttp2_maybe_complete_recv_trailing_metadata()

void grpc_chttp2_maybe_complete_recv_trailing_metadata ( grpc_chttp2_transport t,
grpc_chttp2_stream s 
)

◆ grpc_chttp2_parsing_accept_stream()

grpc_chttp2_stream* grpc_chttp2_parsing_accept_stream ( grpc_chttp2_transport t,
uint32_t  id 
)

◆ grpc_chttp2_parsing_become_skip_parser()

void grpc_chttp2_parsing_become_skip_parser ( grpc_chttp2_transport t)

◆ grpc_chttp2_parsing_lookup_stream()

grpc_chttp2_stream* grpc_chttp2_parsing_lookup_stream ( grpc_chttp2_transport t,
uint32_t  id 
)
inline

◆ grpc_chttp2_perform_read()

grpc_error* grpc_chttp2_perform_read ( grpc_chttp2_transport t,
const grpc_slice slice 
)

Process one slice of incoming data; return 1 if the connection is still viable after reading, or 0 if the connection should be torn down.

◆ grpc_chttp2_ref_transport()

void grpc_chttp2_ref_transport ( grpc_chttp2_transport t,
const char *  reason,
const char *  file,
int  line 
)
inline

◆ grpc_chttp2_retry_initiate_ping()

void grpc_chttp2_retry_initiate_ping ( void *  tp,
grpc_error error 
)

◆ grpc_chttp2_start_writing()

void grpc_chttp2_start_writing ( grpc_chttp2_transport t)

◆ grpc_chttp2_stream_ref()

void grpc_chttp2_stream_ref ( grpc_chttp2_stream s,
const char *  reason 
)

◆ grpc_chttp2_stream_unref()

void grpc_chttp2_stream_unref ( grpc_chttp2_stream s,
const char *  reason 
)

◆ grpc_chttp2_unref_transport()

void grpc_chttp2_unref_transport ( grpc_chttp2_transport t,
const char *  reason,
const char *  file,
int  line 
)
inline