198
}
199
200
>
func (h *httpHandler) startOperation(service, operation string, writer http.ResponseWriter, request *http.Request) {
server.go
201
>
links, err := getLinksFromHeader(request.Header)
202
>
if err != nil {
203
h.WriteFailure(writer, request, nexus.NewHandlerErrorf(nexus.HandlerErrorTypeBadRequest, "invalid %q header", headerLink))
204
return
205
}
206
>
options := nexus.StartOperationOptions{
server.go
207
>
RequestID: request.Header.Get(headerRequestID),
208
>
CallbackURL: request.URL.Query().Get(queryCallbackURL),
209
>
CallbackHeader: prefixStrippedHTTPHeaderToNexusHeader(request.Header, "nexus-callback-"),
210
>
Header: httpHeaderToNexusHeader(request.Header, "content-", "nexus-callback-"),
211
>
Links: links,
212
>
}
213
>
value := nexus.NewLazyValue(
214
>
h.options.Serializer,
215
>
&nexus.Reader{
216
>
ReadCloser: request.Body,
217
>
Header: prefixStrippedHTTPHeaderToNexusHeader(request.Header, "content-"),
218
>
},
219
>
)
220
>
221
>
ctx, cancel, ok := h.contextWithTimeoutFromHTTPRequest(writer, request)
222
>
if !ok {
223
return
224
}
226
>
227
>
ctx = nexus.WithHandlerContext(ctx, nexus.HandlerInfo{
228
>
Service: service,
229
>
Operation: operation,
230
>
Header: options.Header,
231
>
})
232
>
response, err := h.options.Handler.StartOperation(ctx, service, operation, value, options)
233
>
if err != nil {
234
h.WriteFailure(writer, request, err)
236
>
if err := addLinksToHTTPHeader(nexus.HandlerLinks(ctx), writer.Header()); err != nil {
server.go
237
h.Logger.Error("failed to serialize links into header", "error", err)
238
// clear any previous links already written to the header