MCPcopy
hub / github.com/grpc/grpc-go / sendResponse

Method sendResponse

server.go:1188–1222  ·  view source on GitHub ↗
(ctx context.Context, stream *transport.ServerStream, msg any, cp Compressor, opts *transport.WriteOptions, comp encoding.Compressor)

Source from the content-addressed store, hash-verified

1186}
1187
1188func (s *Server) sendResponse(ctx context.Context, stream *transport.ServerStream, msg any, cp Compressor, opts *transport.WriteOptions, comp encoding.Compressor) error {
1189 data, err := encode(s.getCodec(stream.ContentSubtype()), msg)
1190 if err != nil {
1191 channelz.Error(logger, s.channelz, "grpc: server failed to encode response: ", err)
1192 return err
1193 }
1194
1195 compData, pf, err := compress(data, cp, comp, s.opts.bufferPool)
1196 if err != nil {
1197 data.Free()
1198 channelz.Error(logger, s.channelz, "grpc: server failed to compress response: ", err)
1199 return err
1200 }
1201
1202 hdr, payload := msgHeader(data, compData, pf)
1203
1204 defer func() {
1205 compData.Free()
1206 data.Free()
1207 // payload does not need to be freed here, it is either data or compData, both of
1208 // which are already freed.
1209 }()
1210
1211 dataLen := data.Len()
1212 payloadLen := payload.Len()
1213 // TODO(dfawley): should we be checking len(data) instead?
1214 if payloadLen > s.opts.maxSendMessageSize {
1215 return status.Errorf(codes.ResourceExhausted, "grpc: trying to send message larger than max (%d vs. %d)", payloadLen, s.opts.maxSendMessageSize)
1216 }
1217 err = stream.Write(hdr, payload, opts)
1218 if err == nil && s.statsHandler != nil {
1219 s.statsHandler.HandleRPC(ctx, outPayload(false, msg, dataLen, payloadLen, time.Now()))
1220 }
1221 return err
1222}
1223
1224// chainUnaryServerInterceptors chains all unary server interceptors into one.
1225func chainUnaryServerInterceptors(s *Server) {

Callers 1

processUnaryRPCMethod · 0.95

Calls 13

getCodecMethod · 0.95
ErrorFunction · 0.92
ErrorfFunction · 0.92
encodeFunction · 0.85
compressFunction · 0.85
msgHeaderFunction · 0.85
outPayloadFunction · 0.85
ContentSubtypeMethod · 0.80
NowMethod · 0.80
FreeMethod · 0.65
LenMethod · 0.65
WriteMethod · 0.65

Tested by

no test coverage detected