|
|
|
@ -1615,15 +1615,14 @@ void grpc_chttp2_hpack_parser_destroy(grpc_exec_ctx *exec_ctx, |
|
|
|
|
|
|
|
|
|
grpc_error *grpc_chttp2_hpack_parser_parse(grpc_exec_ctx *exec_ctx, |
|
|
|
|
grpc_chttp2_hpack_parser *p, |
|
|
|
|
grpc_slice_refcount *refcount, |
|
|
|
|
const uint8_t *beg, |
|
|
|
|
const uint8_t *end) { |
|
|
|
|
grpc_slice slice) { |
|
|
|
|
/* TODO(ctiller): limit the distance of end from beg, and perform multiple
|
|
|
|
|
steps in the event of a large chunk of data to limit |
|
|
|
|
stack space usage when no tail call optimization is |
|
|
|
|
available */ |
|
|
|
|
p->current_slice_refcount = refcount; |
|
|
|
|
grpc_error *error = p->state(exec_ctx, p, beg, end); |
|
|
|
|
p->current_slice_refcount = slice.refcount; |
|
|
|
|
grpc_error *error = p->state(exec_ctx, p, GRPC_SLICE_START_PTR(slice), |
|
|
|
|
GRPC_SLICE_END_PTR(slice)); |
|
|
|
|
p->current_slice_refcount = NULL; |
|
|
|
|
return error; |
|
|
|
|
} |
|
|
|
@ -1659,9 +1658,7 @@ grpc_error *grpc_chttp2_header_parser_parse(grpc_exec_ctx *exec_ctx, |
|
|
|
|
if (s != NULL) { |
|
|
|
|
s->stats.incoming.header_bytes += GRPC_SLICE_LENGTH(slice); |
|
|
|
|
} |
|
|
|
|
grpc_error *error = grpc_chttp2_hpack_parser_parse( |
|
|
|
|
exec_ctx, parser, slice.refcount, GRPC_SLICE_START_PTR(slice), |
|
|
|
|
GRPC_SLICE_END_PTR(slice)); |
|
|
|
|
grpc_error *error = grpc_chttp2_hpack_parser_parse(exec_ctx, parser, slice); |
|
|
|
|
if (error != GRPC_ERROR_NONE) { |
|
|
|
|
GPR_TIMER_END("grpc_chttp2_hpack_parser_parse", 0); |
|
|
|
|
return error; |
|
|
|
|