GRPC Core 0.10.0.0

- Main Page
- Data Structures
- Files

- File List
- Globals

All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
Data Structures | Macros | Typedefs | Enumerations | Functions | Variables
internal.h File Reference
`#include "src/core/iomgr/endpoint.h"`
`#include "src/core/transport/chttp2/frame.h"`
`#include "src/core/transport/chttp2/frame_data.h"`
`#include "src/core/transport/chttp2/frame_goaway.h"`
`#include "src/core/transport/chttp2/frame_ping.h"`
`#include "src/core/transport/chttp2/frame_rst_stream.h"`
`#include "src/core/transport/chttp2/frame_settings.h"`
`#include "src/core/transport/chttp2/frame_window_update.h"`
`#include "src/core/transport/chttp2/hpack_parser.h"`
`#include "src/core/transport/chttp2/incoming_metadata.h"`
`#include "src/core/transport/chttp2/stream_encoder.h"`
`#include "src/core/transport/chttp2/stream_map.h"`
`#include "src/core/transport/connectivity_state.h"`
`#include "src/core/transport/transport_impl.h"`

Go to the source code of this file.

## Data Structures
struct | grpc_chttp2_stream_list
struct | grpc_chttp2_stream_link
struct | grpc_chttp2_outstanding_ping
struct | grpc_chttp2_transport_global
struct | grpc_chttp2_transport_writing
struct | grpc_chttp2_transport_parsing
struct | grpc_chttp2_transport
struct | grpc_chttp2_stream_global
struct | grpc_chttp2_stream_writing
struct | grpc_chttp2_stream_parsing
struct | grpc_chttp2_stream

## Macros
#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_FLOWCTL_TRACE_STREAM(reason, transport, context, var,delta)
#define | GRPC_CHTTP2_FLOWCTL_TRACE_TRANSPORT(reason, context, var, delta)

## Typedefs
typedef struct grpc_chttp2_transport | grpc_chttp2_transport
typedef struct grpc_chttp2_stream | grpc_chttp2_stream
typedef struct grpc_chttp2_outstanding_ping | grpc_chttp2_outstanding_ping

## Enumerations
enum | grpc_chttp2_stream_list_id { GRPC_CHTTP2_LIST_ALL_STREAMS, GRPC_CHTTP2_LIST_READ_WRITE_STATE_CHANGED, GRPC_CHTTP2_LIST_WRITABLE, GRPC_CHTTP2_LIST_WRITING, GRPC_CHTTP2_LIST_WRITTEN, GRPC_CHTTP2_LIST_PARSING_SEEN, GRPC_CHTTP2_LIST_CLOSED_WAITING_FOR_PARSING, GRPC_CHTTP2_LIST_CANCELLED_WAITING_FOR_WRITING, GRPC_CHTTP2_LIST_INCOMING_WINDOW_UPDATED, GRPC_CHTTP2_LIST_WAITING_FOR_CONCURRENCY, STREAM_LIST_COUNT }
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_write_state { GRPC_WRITE_STATE_OPEN, GRPC_WRITE_STATE_QUEUED_CLOSE, GRPC_WRITE_STATE_SENT_CLOSE }
enum | grpc_chttp2_send_closed { GRPC_DONT_SEND_CLOSED = 0, GRPC_SEND_CLOSED, GRPC_SEND_CLOSED_WITH_RST_STREAM }
enum | grpc_chttp2_setting_set { GRPC_PEER_SETTINGS = 0, GRPC_LOCAL_SETTINGS, GRPC_SENT_SETTINGS, GRPC_ACKED_SETTINGS, GRPC_NUM_SETTING_SETS }

## Functions
int | grpc_chttp2_unlocking_check_writes (grpc_chttp2_transport_global *global, grpc_chttp2_transport_writing *writing)
| Transport writing call flow: chttp2_transport.c calls grpc_chttp2_unlocking_check_writes to see if writes are required; if they are, chttp2_transport.c calls grpc_chttp2_perform_writes to do the writes. More...
void | grpc_chttp2_perform_writes (grpc_chttp2_transport_writing *transport_writing, grpc_endpoint *endpoint)
void | grpc_chttp2_terminate_writing (grpc_chttp2_transport_writing *transport_writing, int success)
void | grpc_chttp2_cleanup_writing (grpc_chttp2_transport_global *global, grpc_chttp2_transport_writing *writing)
void | grpc_chttp2_prepare_to_read (grpc_chttp2_transport_global *global, grpc_chttp2_transport_parsing *parsing)
int | grpc_chttp2_perform_read (grpc_chttp2_transport_parsing *transport_parsing, gpr_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...
void | grpc_chttp2_publish_reads (grpc_chttp2_transport_global *global, grpc_chttp2_transport_parsing *parsing)
void | grpc_chttp2_list_add_writable_stream (grpc_chttp2_transport_global *transport_global, grpc_chttp2_stream_global *stream_global)
| Get a writable stream returns non-zero if there was a stream available. More...
void | grpc_chttp2_list_add_first_writable_stream (grpc_chttp2_transport_global *transport_global, grpc_chttp2_stream_global *stream_global)
int | grpc_chttp2_list_pop_writable_stream (grpc_chttp2_transport_global *transport_global, grpc_chttp2_transport_writing *transport_writing, grpc_chttp2_stream_global **stream_global, grpc_chttp2_stream_writing **stream_writing)
void | grpc_chttp2_list_remove_writable_stream (grpc_chttp2_transport_global *transport_global, grpc_chttp2_stream_global *stream_global)
void | grpc_chttp2_list_add_incoming_window_updated (grpc_chttp2_transport_global *transport_global, grpc_chttp2_stream_global *stream_global)
int | grpc_chttp2_list_pop_incoming_window_updated (grpc_chttp2_transport_global *transport_global, grpc_chttp2_transport_parsing *transport_parsing, grpc_chttp2_stream_global **stream_global, grpc_chttp2_stream_parsing **stream_parsing)
void | grpc_chttp2_list_remove_incoming_window_updated (grpc_chttp2_transport_global *transport_global, grpc_chttp2_stream_global *stream_global)
void | grpc_chttp2_list_add_writing_stream (grpc_chttp2_transport_writing *transport_writing, grpc_chttp2_stream_writing *stream_writing)
int | grpc_chttp2_list_have_writing_streams (grpc_chttp2_transport_writing *transport_writing)
int | grpc_chttp2_list_pop_writing_stream (grpc_chttp2_transport_writing *transport_writing, grpc_chttp2_stream_writing **stream_writing)
void | grpc_chttp2_list_add_written_stream (grpc_chttp2_transport_writing *transport_writing, grpc_chttp2_stream_writing *stream_writing)
int | grpc_chttp2_list_pop_written_stream (grpc_chttp2_transport_global *transport_global, grpc_chttp2_transport_writing *transport_writing, grpc_chttp2_stream_global **stream_global, grpc_chttp2_stream_writing **stream_writing)
void | grpc_chttp2_list_add_parsing_seen_stream (grpc_chttp2_transport_parsing *transport_parsing, grpc_chttp2_stream_parsing *stream_parsing)
int | grpc_chttp2_list_pop_parsing_seen_stream (grpc_chttp2_transport_global *transport_global, grpc_chttp2_transport_parsing *transport_parsing, grpc_chttp2_stream_global **stream_global, grpc_chttp2_stream_parsing **stream_parsing)
void | grpc_chttp2_list_add_waiting_for_concurrency (grpc_chttp2_transport_global *transport_global, grpc_chttp2_stream_global *stream_global)
int | grpc_chttp2_list_pop_waiting_for_concurrency (grpc_chttp2_transport_global *transport_global, grpc_chttp2_stream_global **stream_global)
void | grpc_chttp2_list_add_closed_waiting_for_parsing (grpc_chttp2_transport_global *transport_global, grpc_chttp2_stream_global *stream_global)
int | grpc_chttp2_list_pop_closed_waiting_for_parsing (grpc_chttp2_transport_global *transport_global, grpc_chttp2_stream_global **stream_global)
void | grpc_chttp2_list_add_cancelled_waiting_for_writing (grpc_chttp2_transport_global *transport_global, grpc_chttp2_stream_global *stream_global)
int | grpc_chttp2_list_pop_cancelled_waiting_for_writing (grpc_chttp2_transport_global *transport_global, grpc_chttp2_stream_global **stream_global)
void | grpc_chttp2_list_add_read_write_state_changed (grpc_chttp2_transport_global *transport_global, grpc_chttp2_stream_global *stream_global)
int | grpc_chttp2_list_pop_read_write_state_changed (grpc_chttp2_transport_global *transport_global, grpc_chttp2_stream_global **stream_global)
void | grpc_chttp2_schedule_closure (grpc_chttp2_transport_global *transport_global, grpc_iomgr_closure *closure, int success)
| schedule a closure to run without the transport lock taken More...
grpc_chttp2_stream_parsing * | grpc_chttp2_parsing_lookup_stream (grpc_chttp2_transport_parsing *transport_parsing, gpr_uint32 id)
grpc_chttp2_stream_parsing * | grpc_chttp2_parsing_accept_stream (grpc_chttp2_transport_parsing *transport_parsing, gpr_uint32 id)
void | grpc_chttp2_add_incoming_goaway (grpc_chttp2_transport_global *transport_global, gpr_uint32 goaway_error, gpr_slice goaway_text)
void | grpc_chttp2_register_stream (grpc_chttp2_transport *t, grpc_chttp2_stream *s)
int | grpc_chttp2_unregister_stream (grpc_chttp2_transport *t, grpc_chttp2_stream *s) GRPC_MUST_USE_RESULT
int | grpc_chttp2_has_streams (grpc_chttp2_transport *t)
void | grpc_chttp2_for_all_streams (grpc_chttp2_transport_global *transport_global, void *user_data, void(*cb)(grpc_chttp2_transport_global *transport_global, void *user_data, grpc_chttp2_stream_global *stream_global))
void | grpc_chttp2_parsing_become_skip_parser (grpc_chttp2_transport_parsing *transport_parsing)
void | grpc_chttp2_flowctl_trace (const char *file, int line, const char *reason, const char *context, const char *var, int is_client, gpr_uint32 stream_id, gpr_int64 current_value, gpr_int64 delta)

## Variables
int | grpc_http_trace
int | grpc_flowctl_trace

## Macro Definition Documentation

#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_FLOWCTL_TRACE_STREAM | ( |  | reason,
|  |  | transport,
|  |  | context,
|  |  | var,
|  |  | delta
| ) |  |

Value:
if (!(grpc_flowctl_trace)) { \
} else { \
grpc_chttp2_flowctl_trace(__FILE__, __LINE__, reason, #context, #var, \
transport->is_client, context->id, context->var, \
delta); \
}
grpc_flowctl_trace
int grpc_flowctl_trace
Definition: chttp2_transport.c:61
grpc_chttp2_flowctl_trace
void grpc_chttp2_flowctl_trace(const char *file, int line, const char *reason, const char *context, const char *var, int is_client, gpr_uint32 stream_id, gpr_int64 current_value, gpr_int64 delta)
Definition: chttp2_transport.c:1069

#define GRPC_CHTTP2_FLOWCTL_TRACE_TRANSPORT | ( |  | reason,
|  |  | context,
|  |  | var,
|  |  | delta
| ) |  |

Value:
if (!(grpc_flowctl_trace)) { \
} else { \
grpc_chttp2_flowctl_trace(__FILE__, __LINE__, reason, #context, #var, \
context->is_client, 0, context->var, delta); \
}
grpc_flowctl_trace
int grpc_flowctl_trace
Definition: chttp2_transport.c:61
grpc_chttp2_flowctl_trace
void grpc_chttp2_flowctl_trace(const char *file, int line, const char *reason, const char *context, const char *var, int is_client, gpr_uint32 stream_id, gpr_int64 current_value, gpr_int64 delta)
Definition: chttp2_transport.c:1069

#define GRPC_CHTTP2_IF_TRACING | ( |  | stmt | ) |

Value:
if (!(grpc_http_trace)) \
; \
else \
stmt
grpc_http_trace
int grpc_http_trace
Definition: chttp2_transport.c:60

## Typedef Documentation

typedef struct grpc_chttp2_outstanding_ping grpc_chttp2_outstanding_ping

typedef struct grpc_chttp2_stream grpc_chttp2_stream

typedef struct grpc_chttp2_transport grpc_chttp2_transport

## Enumeration Type Documentation

enum 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 |

enum grpc_chttp2_send_closed

Enumerator
GRPC_DONT_SEND_CLOSED |
GRPC_SEND_CLOSED |
GRPC_SEND_CLOSED_WITH_RST_STREAM |

enum grpc_chttp2_setting_set

Enumerator
GRPC_PEER_SETTINGS |
GRPC_LOCAL_SETTINGS |
GRPC_SENT_SETTINGS |
GRPC_ACKED_SETTINGS |
GRPC_NUM_SETTING_SETS |

enum grpc_chttp2_stream_list_id

Enumerator
GRPC_CHTTP2_LIST_ALL_STREAMS |
GRPC_CHTTP2_LIST_READ_WRITE_STATE_CHANGED |
GRPC_CHTTP2_LIST_WRITABLE |
GRPC_CHTTP2_LIST_WRITING |
GRPC_CHTTP2_LIST_WRITTEN |
GRPC_CHTTP2_LIST_PARSING_SEEN |
GRPC_CHTTP2_LIST_CLOSED_WAITING_FOR_PARSING |
GRPC_CHTTP2_LIST_CANCELLED_WAITING_FOR_WRITING |
GRPC_CHTTP2_LIST_INCOMING_WINDOW_UPDATED |
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 |

enum grpc_chttp2_write_state

Enumerator
GRPC_WRITE_STATE_OPEN |
GRPC_WRITE_STATE_QUEUED_CLOSE |
GRPC_WRITE_STATE_SENT_CLOSE |

## Function Documentation

void grpc_chttp2_add_incoming_goaway | ( | grpc_chttp2_transport_global * | transport_global,
|  | gpr_uint32 | goaway_error,
|  | gpr_slice | goaway_text
| ) |  |

void grpc_chttp2_cleanup_writing | ( | grpc_chttp2_transport_global * | global,
|  | grpc_chttp2_transport_writing * | writing
| ) |  |

void grpc_chttp2_flowctl_trace | ( | const char * | file,
|  | int | line,
|  | const char * | reason,
|  | const char * | context,
|  | const char * | var,
|  | int | is_client,
|  | gpr_uint32 | stream_id,
|  | gpr_int64 | current_value,
|  | gpr_int64 | delta
| ) |  |

void grpc_chttp2_for_all_streams | ( | grpc_chttp2_transport_global * | transport_global,
|  | void * | user_data,
|  | void(*)(grpc_chttp2_transport_global *transport_global, void *user_data, grpc_chttp2_stream_global *stream_global) | cb
| ) |  |

int grpc_chttp2_has_streams | ( | grpc_chttp2_transport * | t | ) |

void grpc_chttp2_list_add_cancelled_waiting_for_writing | ( | grpc_chttp2_transport_global * | transport_global,
|  | grpc_chttp2_stream_global * | stream_global
| ) |  |

void grpc_chttp2_list_add_closed_waiting_for_parsing | ( | grpc_chttp2_transport_global * | transport_global,
|  | grpc_chttp2_stream_global * | stream_global
| ) |  |

void grpc_chttp2_list_add_first_writable_stream | ( | grpc_chttp2_transport_global * | transport_global,
|  | grpc_chttp2_stream_global * | stream_global
| ) |  |

void grpc_chttp2_list_add_incoming_window_updated | ( | grpc_chttp2_transport_global * | transport_global,
|  | grpc_chttp2_stream_global * | stream_global
| ) |  |

void grpc_chttp2_list_add_parsing_seen_stream | ( | grpc_chttp2_transport_parsing * | transport_parsing,
|  | grpc_chttp2_stream_parsing * | stream_parsing
| ) |  |

void grpc_chttp2_list_add_read_write_state_changed | ( | grpc_chttp2_transport_global * | transport_global,
|  | grpc_chttp2_stream_global * | stream_global
| ) |  |

void grpc_chttp2_list_add_waiting_for_concurrency | ( | grpc_chttp2_transport_global * | transport_global,
|  | grpc_chttp2_stream_global * | stream_global
| ) |  |

void grpc_chttp2_list_add_writable_stream | ( | grpc_chttp2_transport_global * | transport_global,
|  | grpc_chttp2_stream_global * | stream_global
| ) |  |

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

void grpc_chttp2_list_add_writing_stream | ( | grpc_chttp2_transport_writing * | transport_writing,
|  | grpc_chttp2_stream_writing * | stream_writing
| ) |  |

void grpc_chttp2_list_add_written_stream | ( | grpc_chttp2_transport_writing * | transport_writing,
|  | grpc_chttp2_stream_writing * | stream_writing
| ) |  |

int grpc_chttp2_list_have_writing_streams | ( | grpc_chttp2_transport_writing * | transport_writing | ) |

int grpc_chttp2_list_pop_cancelled_waiting_for_writing | ( | grpc_chttp2_transport_global * | transport_global,
|  | grpc_chttp2_stream_global ** | stream_global
| ) |  |

int grpc_chttp2_list_pop_closed_waiting_for_parsing | ( | grpc_chttp2_transport_global * | transport_global,
|  | grpc_chttp2_stream_global ** | stream_global
| ) |  |

int grpc_chttp2_list_pop_incoming_window_updated | ( | grpc_chttp2_transport_global * | transport_global,
|  | grpc_chttp2_transport_parsing * | transport_parsing,
|  | grpc_chttp2_stream_global ** | stream_global,
|  | grpc_chttp2_stream_parsing ** | stream_parsing
| ) |  |

int grpc_chttp2_list_pop_parsing_seen_stream | ( | grpc_chttp2_transport_global * | transport_global,
|  | grpc_chttp2_transport_parsing * | transport_parsing,
|  | grpc_chttp2_stream_global ** | stream_global,
|  | grpc_chttp2_stream_parsing ** | stream_parsing
| ) |  |

int grpc_chttp2_list_pop_read_write_state_changed | ( | grpc_chttp2_transport_global * | transport_global,
|  | grpc_chttp2_stream_global ** | stream_global
| ) |  |

int grpc_chttp2_list_pop_waiting_for_concurrency | ( | grpc_chttp2_transport_global * | transport_global,
|  | grpc_chttp2_stream_global ** | stream_global
| ) |  |

int grpc_chttp2_list_pop_writable_stream | ( | grpc_chttp2_transport_global * | transport_global,
|  | grpc_chttp2_transport_writing * | transport_writing,
|  | grpc_chttp2_stream_global ** | stream_global,
|  | grpc_chttp2_stream_writing ** | stream_writing
| ) |  |

int grpc_chttp2_list_pop_writing_stream | ( | grpc_chttp2_transport_writing * | transport_writing,
|  | grpc_chttp2_stream_writing ** | stream_writing
| ) |  |

int grpc_chttp2_list_pop_written_stream | ( | grpc_chttp2_transport_global * | transport_global,
|  | grpc_chttp2_transport_writing * | transport_writing,
|  | grpc_chttp2_stream_global ** | stream_global,
|  | grpc_chttp2_stream_writing ** | stream_writing
| ) |  |

void grpc_chttp2_list_remove_incoming_window_updated | ( | grpc_chttp2_transport_global * | transport_global,
|  | grpc_chttp2_stream_global * | stream_global
| ) |  |

void grpc_chttp2_list_remove_writable_stream | ( | grpc_chttp2_transport_global * | transport_global,
|  | grpc_chttp2_stream_global * | stream_global
| ) |  |

grpc_chttp2_stream_parsing* grpc_chttp2_parsing_accept_stream | ( | grpc_chttp2_transport_parsing * | transport_parsing,
|  | gpr_uint32 | id
| ) |  |

void grpc_chttp2_parsing_become_skip_parser | ( | grpc_chttp2_transport_parsing * | transport_parsing | ) |

grpc_chttp2_stream_parsing* grpc_chttp2_parsing_lookup_stream | ( | grpc_chttp2_transport_parsing * | transport_parsing,
|  | gpr_uint32 | id
| ) |  |

int grpc_chttp2_perform_read | ( | grpc_chttp2_transport_parsing * | transport_parsing,
|  | gpr_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.

void grpc_chttp2_perform_writes | ( | grpc_chttp2_transport_writing * | transport_writing,
|  | grpc_endpoint * | endpoint
| ) |  |

void grpc_chttp2_prepare_to_read | ( | grpc_chttp2_transport_global * | global,
|  | grpc_chttp2_transport_parsing * | parsing
| ) |  |

void grpc_chttp2_publish_reads | ( | grpc_chttp2_transport_global * | global,
|  | grpc_chttp2_transport_parsing * | parsing
| ) |  |

void grpc_chttp2_register_stream | ( | grpc_chttp2_transport * | t,
|  | grpc_chttp2_stream * | s
| ) |  |

void grpc_chttp2_schedule_closure | ( | grpc_chttp2_transport_global * | transport_global,
|  | grpc_iomgr_closure * | closure,
|  | int | success
| ) |  |

schedule a closure to run without the transport lock taken

void grpc_chttp2_terminate_writing | ( | grpc_chttp2_transport_writing * | transport_writing,
|  | int | success
| ) |  |

int grpc_chttp2_unlocking_check_writes | ( | grpc_chttp2_transport_global * | global,
|  | grpc_chttp2_transport_writing * | writing
| ) |  |

Transport writing call flow: chttp2_transport.c calls grpc_chttp2_unlocking_check_writes to see if writes are required; if they are, chttp2_transport.c calls grpc_chttp2_perform_writes to do the writes.

Once writes have been completed (meaning another write could potentially be started), grpc_chttp2_terminate_writing is called. This will call grpc_chttp2_cleanup_writing, at which point the write phase is complete. Someone is unlocking the transport mutex: check to see if writes are required, and schedule them if so

int grpc_chttp2_unregister_stream | ( | grpc_chttp2_transport * | t,
|  | grpc_chttp2_stream * | s
| ) |  |

## Variable Documentation

int grpc_flowctl_trace

int grpc_http_trace