in lambda/core/directinvoke/directinvoke.go [455:486]
func SendDirectInvokeResponse(additionalHeaders map[string]string, payload io.Reader, trailers http.Header,
w http.ResponseWriter, interruptedResponseChan chan *interop.Reset,
sendResponseChan chan *interop.InvokeResponseMetrics, request *interop.CancellableRequest, runtimeCalledResponse bool, invokeID string) error {
for k, v := range additionalHeaders {
w.Header().Add(k, v)
}
var err error
log.Infof("Started sending response (mode: %s, requestID: %s)", InvokeResponseMode, invokeID)
if InvokeResponseMode == interop.InvokeResponseModeStreaming {
// send streamed error response when runtime called /error
if isErrorResponse(additionalHeaders) {
err = sendStreamingInvokeErrorResponse(payload, w, interruptedResponseChan, sendResponseChan, runtimeCalledResponse)
if err != nil {
log.Infof("Error in sending error response (mode: %s, requestID: %s, error: %v)", InvokeResponseMode, invokeID, err)
}
return err
}
// send streamed response when runtime called /response
err = sendStreamingInvokeResponse(payload, trailers, w, interruptedResponseChan, sendResponseChan, request, runtimeCalledResponse)
} else {
err = sendPayloadLimitedResponse(payload, trailers, w, sendResponseChan, runtimeCalledResponse)
}
if err != nil {
log.Infof("Error in sending response (mode: %s, requestID: %s, error: %v)", InvokeResponseMode, invokeID, err)
} else {
log.Infof("Completed sending response (mode: %s, requestID: %s)", InvokeResponseMode, invokeID)
}
return err
}