type Compressor … type gzipCompressor … // NewGZIPCompressor creates a Compressor based on GZIP. // // Deprecated: use package encoding/gzip. func NewGZIPCompressor() Compressor { … } // NewGZIPCompressorWithLevel is like NewGZIPCompressor but specifies the gzip compression level instead // of assuming DefaultCompression. // // The error returned will be nil if the level is valid. // // Deprecated: use package encoding/gzip. func NewGZIPCompressorWithLevel(level int) (Compressor, error) { … } func (c *gzipCompressor) Do(w io.Writer, p []byte) error { … } func (c *gzipCompressor) Type() string { … } type Decompressor … type gzipDecompressor … // NewGZIPDecompressor creates a Decompressor based on GZIP. // // Deprecated: use package encoding/gzip. func NewGZIPDecompressor() Decompressor { … } func (d *gzipDecompressor) Do(r io.Reader) ([]byte, error) { … } func (d *gzipDecompressor) Type() string { … } type callInfo … func defaultCallInfo() *callInfo { … } type CallOption … type EmptyCallOption … func (EmptyCallOption) before(*callInfo) error { … } func (EmptyCallOption) after(*callInfo, *csAttempt) { … } // StaticMethod returns a CallOption which specifies that a call is being made // to a method that is static, which means the method is known at compile time // and doesn't change at runtime. This can be used as a signal to stats plugins // that this method is safe to include as a key to a measurement. func StaticMethod() CallOption { … } type StaticMethodCallOption … // Header returns a CallOptions that retrieves the header metadata // for a unary RPC. func Header(md *metadata.MD) CallOption { … } type HeaderCallOption … func (o HeaderCallOption) before(c *callInfo) error { … } func (o HeaderCallOption) after(c *callInfo, attempt *csAttempt) { … } // Trailer returns a CallOptions that retrieves the trailer metadata // for a unary RPC. func Trailer(md *metadata.MD) CallOption { … } type TrailerCallOption … func (o TrailerCallOption) before(c *callInfo) error { … } func (o TrailerCallOption) after(c *callInfo, attempt *csAttempt) { … } // Peer returns a CallOption that retrieves peer information for a unary RPC. // The peer field will be populated *after* the RPC completes. func Peer(p *peer.Peer) CallOption { … } type PeerCallOption … func (o PeerCallOption) before(c *callInfo) error { … } func (o PeerCallOption) after(c *callInfo, attempt *csAttempt) { … } // WaitForReady configures the action to take when an RPC is attempted on broken // connections or unreachable servers. If waitForReady is false and the // connection is in the TRANSIENT_FAILURE state, the RPC will fail // immediately. Otherwise, the RPC client will block the call until a // connection is available (or the call is canceled or times out) and will // retry the call if it fails due to a transient error. gRPC will not retry if // data was written to the wire unless the server indicates it did not process // the data. Please refer to // https://github.com/grpc/grpc/blob/master/doc/wait-for-ready.md. // // By default, RPCs don't "wait for ready". func WaitForReady(waitForReady bool) CallOption { … } // FailFast is the opposite of WaitForReady. // // Deprecated: use WaitForReady. func FailFast(failFast bool) CallOption { … } type FailFastCallOption … func (o FailFastCallOption) before(c *callInfo) error { … } func (o FailFastCallOption) after(c *callInfo, attempt *csAttempt) { … } // OnFinish returns a CallOption that configures a callback to be called when // the call completes. The error passed to the callback is the status of the // RPC, and may be nil. The onFinish callback provided will only be called once // by gRPC. This is mainly used to be used by streaming interceptors, to be // notified when the RPC completes along with information about the status of // the RPC. // // # Experimental // // Notice: This API is EXPERIMENTAL and may be changed or removed in a // later release. func OnFinish(onFinish func(err error)) CallOption { … } type OnFinishCallOption … func (o OnFinishCallOption) before(c *callInfo) error { … } func (o OnFinishCallOption) after(c *callInfo, attempt *csAttempt) { … } // MaxCallRecvMsgSize returns a CallOption which sets the maximum message size // in bytes the client can receive. If this is not set, gRPC uses the default // 4MB. func MaxCallRecvMsgSize(bytes int) CallOption { … } type MaxRecvMsgSizeCallOption … func (o MaxRecvMsgSizeCallOption) before(c *callInfo) error { … } func (o MaxRecvMsgSizeCallOption) after(c *callInfo, attempt *csAttempt) { … } // MaxCallSendMsgSize returns a CallOption which sets the maximum message size // in bytes the client can send. If this is not set, gRPC uses the default // `math.MaxInt32`. func MaxCallSendMsgSize(bytes int) CallOption { … } type MaxSendMsgSizeCallOption … func (o MaxSendMsgSizeCallOption) before(c *callInfo) error { … } func (o MaxSendMsgSizeCallOption) after(c *callInfo, attempt *csAttempt) { … } // PerRPCCredentials returns a CallOption that sets credentials.PerRPCCredentials // for a call. func PerRPCCredentials(creds credentials.PerRPCCredentials) CallOption { … } type PerRPCCredsCallOption … func (o PerRPCCredsCallOption) before(c *callInfo) error { … } func (o PerRPCCredsCallOption) after(c *callInfo, attempt *csAttempt) { … } // UseCompressor returns a CallOption which sets the compressor used when // sending the request. If WithCompressor is also set, UseCompressor has // higher priority. // // # Experimental // // Notice: This API is EXPERIMENTAL and may be changed or removed in a // later release. func UseCompressor(name string) CallOption { … } type CompressorCallOption … func (o CompressorCallOption) before(c *callInfo) error { … } func (o CompressorCallOption) after(c *callInfo, attempt *csAttempt) { … } // CallContentSubtype returns a CallOption that will set the content-subtype // for a call. For example, if content-subtype is "json", the Content-Type over // the wire will be "application/grpc+json". The content-subtype is converted // to lowercase before being included in Content-Type. See Content-Type on // https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests for // more details. // // If ForceCodec is not also used, the content-subtype will be used to look up // the Codec to use in the registry controlled by RegisterCodec. See the // documentation on RegisterCodec for details on registration. The lookup of // content-subtype is case-insensitive. If no such Codec is found, the call // will result in an error with code codes.Internal. // // If ForceCodec is also used, that Codec will be used for all request and // response messages, with the content-subtype set to the given contentSubtype // here for requests. func CallContentSubtype(contentSubtype string) CallOption { … } type ContentSubtypeCallOption … func (o ContentSubtypeCallOption) before(c *callInfo) error { … } func (o ContentSubtypeCallOption) after(c *callInfo, attempt *csAttempt) { … } // ForceCodec returns a CallOption that will set codec to be used for all // request and response messages for a call. The result of calling Name() will // be used as the content-subtype after converting to lowercase, unless // CallContentSubtype is also used. // // See Content-Type on // https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests for // more details. Also see the documentation on RegisterCodec and // CallContentSubtype for more details on the interaction between Codec and // content-subtype. // // This function is provided for advanced users; prefer to use only // CallContentSubtype to select a registered codec instead. // // # Experimental // // Notice: This API is EXPERIMENTAL and may be changed or removed in a // later release. func ForceCodec(codec encoding.Codec) CallOption { … } type ForceCodecCallOption … func (o ForceCodecCallOption) before(c *callInfo) error { … } func (o ForceCodecCallOption) after(c *callInfo, attempt *csAttempt) { … } // CallCustomCodec behaves like ForceCodec, but accepts a grpc.Codec instead of // an encoding.Codec. // // Deprecated: use ForceCodec instead. func CallCustomCodec(codec Codec) CallOption { … } type CustomCodecCallOption … func (o CustomCodecCallOption) before(c *callInfo) error { … } func (o CustomCodecCallOption) after(c *callInfo, attempt *csAttempt) { … } // MaxRetryRPCBufferSize returns a CallOption that limits the amount of memory // used for buffering this RPC's requests for retry purposes. // // # Experimental // // Notice: This API is EXPERIMENTAL and may be changed or removed in a // later release. func MaxRetryRPCBufferSize(bytes int) CallOption { … } type MaxRetryRPCBufferSizeCallOption … func (o MaxRetryRPCBufferSizeCallOption) before(c *callInfo) error { … } func (o MaxRetryRPCBufferSizeCallOption) after(c *callInfo, attempt *csAttempt) { … } type payloadFormat … const compressionNone … const compressionMade … type parser … // recvMsg reads a complete gRPC message from the stream. // // It returns the message and its payload (compression/encoding) // format. The caller owns the returned msg memory. // // If there is an error, possible values are: // - io.EOF, when no messages remain // - io.ErrUnexpectedEOF // - of type transport.ConnectionError // - an error from the status package // // No other error values or types must be returned, which also means // that the underlying io.Reader must not return an incompatible // error. func (p *parser) recvMsg(maxReceiveMessageSize int) (pf payloadFormat, msg []byte, err error) { … } // encode serializes msg and returns a buffer containing the message, or an // error if it is too large to be transmitted by grpc. If msg is nil, it // generates an empty message. func encode(c baseCodec, msg any) ([]byte, error) { … } // compress returns the input bytes compressed by compressor or cp. // If both compressors are nil, or if the message has zero length, returns nil, // indicating no compression was done. // // TODO(dfawley): eliminate cp parameter by wrapping Compressor in an encoding.Compressor. func compress(in []byte, cp Compressor, compressor encoding.Compressor) ([]byte, error) { … } const payloadLen … const sizeLen … const headerLen … // msgHeader returns a 5-byte header for the message being transmitted and the // payload, which is compData if non-nil or data otherwise. func msgHeader(data, compData []byte) (hdr []byte, payload []byte) { … } func outPayload(client bool, msg any, data, payload []byte, t time.Time) *stats.OutPayload { … } func checkRecvPayload(pf payloadFormat, recvCompress string, haveCompressor bool) *status.Status { … } type payloadInfo … // recvAndDecompress reads a message from the stream, decompressing it if necessary. // // Cancelling the returned cancel function releases the buffer back to the pool. So the caller should cancel as soon as // the buffer is no longer needed. func recvAndDecompress(p *parser, s *transport.Stream, dc Decompressor, maxReceiveMessageSize int, payInfo *payloadInfo, compressor encoding.Compressor, ) (uncompressedBuf []byte, cancel func(), err error) { … } // Using compressor, decompress d, returning data and size. // Optionally, if data will be over maxReceiveMessageSize, just return the size. func decompress(compressor encoding.Compressor, d []byte, maxReceiveMessageSize int) ([]byte, int, error) { … } // For the two compressor parameters, both should not be set, but if they are, // dc takes precedence over compressor. // TODO(dfawley): wrap the old compressor/decompressor using the new API? func recv(p *parser, c baseCodec, s *transport.Stream, dc Decompressor, m any, maxReceiveMessageSize int, payInfo *payloadInfo, compressor encoding.Compressor) error { … } type rpcInfo … type compressorInfo … type rpcInfoContextKey … func newContextWithRPCInfo(ctx context.Context, failfast bool, codec baseCodec, cp Compressor, comp encoding.Compressor) context.Context { … } func rpcInfoFromContext(ctx context.Context) (s *rpcInfo, ok bool) { … } // Code returns the error code for err if it was produced by the rpc system. // Otherwise, it returns codes.Unknown. // // Deprecated: use status.Code instead. func Code(err error) codes.Code { … } // ErrorDesc returns the error description of err if it was produced by the rpc system. // Otherwise, it returns err.Error() or empty string when err is nil. // // Deprecated: use status.Convert and Message method instead. func ErrorDesc(err error) string { … } // Errorf returns an error containing an error code and a description; // Errorf returns nil if c is OK. // // Deprecated: use status.Errorf instead. func Errorf(c codes.Code, format string, a ...any) error { … } var errContextCanceled … var errContextDeadline … // toRPCErr converts an error into an error from the status package. func toRPCErr(err error) error { … } // setCallInfoCodec should only be called after CallOptions have been applied. func setCallInfoCodec(c *callInfo) error { … } const SupportPackageIsVersion3 … const SupportPackageIsVersion4 … const SupportPackageIsVersion5 … const SupportPackageIsVersion6 … const SupportPackageIsVersion7 … const SupportPackageIsVersion8 … const SupportPackageIsVersion9 … const grpcUA …