fshttp: prevent overlap of HTTP headers in logs

This commit is contained in:
Nathan Collins 2020-12-14 14:10:11 -05:00 committed by Nick Craig-Wood
parent 2ed2861d09
commit 50a107a5f3

View File

@ -31,6 +31,7 @@ var (
noTransport = new(sync.Once) noTransport = new(sync.Once)
tpsBucket *rate.Limiter // for limiting number of http transactions per second tpsBucket *rate.Limiter // for limiting number of http transactions per second
cookieJar, _ = cookiejar.New(&cookiejar.Options{PublicSuffixList: publicsuffix.List}) cookieJar, _ = cookiejar.New(&cookiejar.Options{PublicSuffixList: publicsuffix.List})
logMutex sync.Mutex
) )
// StartHTTPTokenBucket starts the token bucket if necessary // StartHTTPTokenBucket starts the token bucket if necessary
@ -328,15 +329,18 @@ func (t *Transport) RoundTrip(req *http.Request) (resp *http.Response, err error
if t.dump&fs.DumpAuth == 0 { if t.dump&fs.DumpAuth == 0 {
buf = cleanAuths(buf) buf = cleanAuths(buf)
} }
logMutex.Lock()
fs.Debugf(nil, "%s", separatorReq) fs.Debugf(nil, "%s", separatorReq)
fs.Debugf(nil, "%s (req %p)", "HTTP REQUEST", req) fs.Debugf(nil, "%s (req %p)", "HTTP REQUEST", req)
fs.Debugf(nil, "%s", string(buf)) fs.Debugf(nil, "%s", string(buf))
fs.Debugf(nil, "%s", separatorReq) fs.Debugf(nil, "%s", separatorReq)
logMutex.Unlock()
} }
// Do round trip // Do round trip
resp, err = t.Transport.RoundTrip(req) resp, err = t.Transport.RoundTrip(req)
// Logf response // Logf response
if t.dump&(fs.DumpHeaders|fs.DumpBodies|fs.DumpAuth|fs.DumpRequests|fs.DumpResponses) != 0 { if t.dump&(fs.DumpHeaders|fs.DumpBodies|fs.DumpAuth|fs.DumpRequests|fs.DumpResponses) != 0 {
logMutex.Lock()
fs.Debugf(nil, "%s", separatorResp) fs.Debugf(nil, "%s", separatorResp)
fs.Debugf(nil, "%s (req %p)", "HTTP RESPONSE", req) fs.Debugf(nil, "%s (req %p)", "HTTP RESPONSE", req)
if err != nil { if err != nil {
@ -346,6 +350,7 @@ func (t *Transport) RoundTrip(req *http.Request) (resp *http.Response, err error
fs.Debugf(nil, "%s", string(buf)) fs.Debugf(nil, "%s", string(buf))
} }
fs.Debugf(nil, "%s", separatorResp) fs.Debugf(nil, "%s", separatorResp)
logMutex.Unlock()
} }
if err == nil { if err == nil {
checkServerTime(req, resp) checkServerTime(req, resp)