projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
20831: Add DiscoveryDocument to arvados.API
[arvados.git]
/
sdk
/
go
/
httpserver
/
responsewriter.go
diff --git
a/sdk/go/httpserver/responsewriter.go
b/sdk/go/httpserver/responsewriter.go
index 26aee65c5ca0da1f5e23e301aa88024c3fac51b9..049a3f1aae184de0ef522656741494db42764802 100644
(file)
--- a/
sdk/go/httpserver/responsewriter.go
+++ b/
sdk/go/httpserver/responsewriter.go
@@
-22,7
+22,7
@@
type ResponseWriter interface {
// error.
type responseWriter struct {
http.ResponseWriter
// error.
type responseWriter struct {
http.ResponseWriter
- wroteStatus int //
La
st status given to WriteHeader()
+ wroteStatus int //
Fir
st status given to WriteHeader()
wroteBodyBytes int // Bytes successfully written
err error // Last error returned from Write()
sniffed []byte
wroteBodyBytes int // Bytes successfully written
err error // Last error returned from Write()
sniffed []byte
@@
-40,15
+40,21
@@
func (w *responseWriter) CloseNotify() <-chan bool {
}
func (w *responseWriter) WriteHeader(s int) {
}
func (w *responseWriter) WriteHeader(s int) {
- w.wroteStatus = s
+ if w.wroteStatus == 0 {
+ w.wroteStatus = s
+ }
+ // ...else it's too late to change the status seen by the
+ // client -- but we call the wrapped WriteHeader() anyway so
+ // it can log a warning.
w.ResponseWriter.WriteHeader(s)
}
func (w *responseWriter) Write(data []byte) (n int, err error) {
if w.wroteStatus == 0 {
w.WriteHeader(http.StatusOK)
w.ResponseWriter.WriteHeader(s)
}
func (w *responseWriter) Write(data []byte) (n int, err error) {
if w.wroteStatus == 0 {
w.WriteHeader(http.StatusOK)
+ } else if w.wroteStatus >= 400 {
+ w.sniff(data)
}
}
- w.sniff(data)
n, err = w.ResponseWriter.Write(data)
w.wroteBodyBytes += n
w.err = err
n, err = w.ResponseWriter.Write(data)
w.wroteBodyBytes += n
w.err = err