MCPcopy
hub / github.com/ContainerSSH/ContainerSSH / ServeHTTP

Method ServeHTTP

http/handler_impl.go:52–89  ·  view source on GitHub ↗
(goWriter goHttp.ResponseWriter, goRequest *goHttp.Request)

Source from the content-addressed store, hash-verified

50}
51
52func (h *handler) ServeHTTP(goWriter goHttp.ResponseWriter, goRequest *goHttp.Request) {
53 response := serverResponse{
54 statusCode: 200,
55 body: nil,
56 }
57 if err := h.requestHandler.OnRequest(
58 &internalRequest{
59 request: goRequest,
60 writer: goWriter,
61 },
62 &response,
63 ); err != nil {
64 if errors.Is(err, &badRequestResponse) {
65 response = badRequestResponse
66 } else {
67 response = internalErrorResponse
68 }
69 }
70 marshaller, responseType, statusCode := h.findMarshaller(goWriter, goRequest)
71 if statusCode != 200 {
72 goWriter.WriteHeader(statusCode)
73 }
74 bytes, err := marshaller.Marshal(response.body)
75 if err != nil {
76 h.logger.Error(message.Wrap(err, message.MHTTPServerEncodeFailed, "failed to marshal response %v", response))
77 response = internalErrorResponse
78 bytes, err = json.Marshal(internalErrorResponse.body)
79 if err != nil {
80 // This should never happen
81 panic(fmt.Errorf("bug: failed to marshal internal server error JSON response (%w)", err))
82 }
83 }
84 goWriter.WriteHeader(int(response.statusCode))
85 goWriter.Header().Add("Content-Type", responseType)
86 if _, err := goWriter.Write(bytes); err != nil {
87 h.logger.Debug(message.Wrap(err, message.MHTTPServerResponseWriteFailed, "Failed to write HTTP response"))
88 }
89}
90
91func (h *handler) findMarshaller(_ goHttp.ResponseWriter, request *goHttp.Request) (responseMarshaller, string, int) {
92 acceptHeader := request.Header.Get("Accept")

Callers

nothing calls this directly

Calls 9

findMarshallerMethod · 0.95
WrapFunction · 0.92
OnRequestMethod · 0.65
MarshalMethod · 0.65
ErrorMethod · 0.65
ErrorfMethod · 0.65
AddMethod · 0.65
WriteMethod · 0.65
DebugMethod · 0.65

Tested by

no test coverage detected