Package io.grpc.internal
Class Http2ClientStreamTransportState
- java.lang.Object
-
- io.grpc.internal.AbstractStream.TransportState
-
- io.grpc.internal.AbstractClientStream.TransportState
-
- io.grpc.internal.Http2ClientStreamTransportState
-
- All Implemented Interfaces:
ApplicationThreadDeframer.TransportExecutor
,ApplicationThreadDeframerListener.TransportExecutor
,MessageDeframer.Listener
- Direct Known Subclasses:
NettyClientStream.TransportState
public abstract class Http2ClientStreamTransportState extends AbstractClientStream.TransportState
Base implementation for client streams using HTTP2 as the transport.
-
-
Field Summary
Fields Modifier and Type Field Description private java.nio.charset.Charset
errorCharset
private boolean
headersReceived
private static InternalMetadata.TrustedAsciiMarshaller<java.lang.Integer>
HTTP_STATUS_MARSHALLER
Metadata marshaller for HTTP status lines.private static Metadata.Key<java.lang.Integer>
HTTP2_STATUS
private Status
transportError
private Metadata
transportErrorMetadata
-
Fields inherited from class io.grpc.internal.AbstractStream.TransportState
DEFAULT_ONREADY_THRESHOLD
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
Http2ClientStreamTransportState(int maxMessageSize, StatsTraceContext statsTraceCtx, TransportTracer transportTracer, CallOptions options)
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description private static java.nio.charset.Charset
extractCharset(Metadata headers)
Inspect the raw metadata and figure out what charset is being used.protected abstract void
http2ProcessingFailed(Status status, boolean stopDelivery, Metadata trailers)
Called to process a failure in HTTP/2 processing.private Status
statusFromTrailers(Metadata trailers)
Extract the response status from trailers.private static void
stripTransportDetails(Metadata metadata)
Strip HTTP transport implementation details so they don't leak via metadata into the application layer.protected void
transportDataReceived(ReadableBuffer frame, boolean endOfStream)
Called by subclasses whenever a data frame is received from the transport.protected void
transportHeadersReceived(Metadata headers)
Called by subclasses wheneverHeaders
are received from the transport.protected void
transportTrailersReceived(Metadata trailers)
Called by subclasses for the terminal trailer metadata on a stream.private Status
validateInitialMetadata(Metadata headers)
Inspect initial headers to make sure they conform to HTTP and gRPC, returning aStatus
on failure.-
Methods inherited from class io.grpc.internal.AbstractClientStream.TransportState
deframerClosed, inboundDataReceived, inboundHeadersReceived, inboundTrailersReceived, isOutboundClosed, listener, setListener, transportReportStatus, transportReportStatus
-
Methods inherited from class io.grpc.internal.AbstractStream.TransportState
closeDeframer, deframe, getStatsTraceContext, getTransportTracer, isStreamDeallocated, messagesAvailable, onSentBytes, onStreamAllocated, onStreamDeallocated, optimizeForDirectExecutor, requestMessagesFromDeframerForTesting, setDecompressor, setFullStreamDecompressor, setMaxInboundMessageSize, setOnReadyThreshold
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface io.grpc.internal.ApplicationThreadDeframerListener.TransportExecutor
runOnTransportThread
-
Methods inherited from interface io.grpc.internal.MessageDeframer.Listener
bytesRead, deframeFailed
-
-
-
-
Field Detail
-
HTTP_STATUS_MARSHALLER
private static final InternalMetadata.TrustedAsciiMarshaller<java.lang.Integer> HTTP_STATUS_MARSHALLER
Metadata marshaller for HTTP status lines.
-
HTTP2_STATUS
private static final Metadata.Key<java.lang.Integer> HTTP2_STATUS
-
transportError
private Status transportError
-
transportErrorMetadata
private Metadata transportErrorMetadata
-
errorCharset
private java.nio.charset.Charset errorCharset
-
headersReceived
private boolean headersReceived
-
-
Constructor Detail
-
Http2ClientStreamTransportState
protected Http2ClientStreamTransportState(int maxMessageSize, StatsTraceContext statsTraceCtx, TransportTracer transportTracer, CallOptions options)
-
-
Method Detail
-
http2ProcessingFailed
protected abstract void http2ProcessingFailed(Status status, boolean stopDelivery, Metadata trailers)
Called to process a failure in HTTP/2 processing. It should notify the transport to cancel the stream and calltransportReportStatus()
.
-
transportHeadersReceived
protected void transportHeadersReceived(Metadata headers)
Called by subclasses wheneverHeaders
are received from the transport.- Parameters:
headers
- the received headers
-
transportDataReceived
protected void transportDataReceived(ReadableBuffer frame, boolean endOfStream)
Called by subclasses whenever a data frame is received from the transport.- Parameters:
frame
- the received data frameendOfStream
-true
if there will be no more data received for this stream
-
transportTrailersReceived
protected void transportTrailersReceived(Metadata trailers)
Called by subclasses for the terminal trailer metadata on a stream.- Parameters:
trailers
- the received terminal trailer metadata
-
statusFromTrailers
private Status statusFromTrailers(Metadata trailers)
Extract the response status from trailers.
-
validateInitialMetadata
@Nullable private Status validateInitialMetadata(Metadata headers)
Inspect initial headers to make sure they conform to HTTP and gRPC, returning aStatus
on failure.- Returns:
- status with description of failure, or
null
when valid
-
extractCharset
private static java.nio.charset.Charset extractCharset(Metadata headers)
Inspect the raw metadata and figure out what charset is being used.
-
stripTransportDetails
private static void stripTransportDetails(Metadata metadata)
Strip HTTP transport implementation details so they don't leak via metadata into the application layer.
-
-