func SendDirectInvokeResponse()

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
}