Skip to content

Commit

Permalink
net/http integration: StdlibTransport wrapper (#8)
Browse files Browse the repository at this point in the history
This diff adds a wrapper for `Transport` that looks like an `http.Transport`.

Part of ooni/probe#1733
  • Loading branch information
kelmenhorst authored Aug 17, 2021
1 parent 3d5b13e commit 35949dc
Showing 1 changed file with 39 additions and 0 deletions.
39 changes: 39 additions & 0 deletions stdlibwrapper.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package http

import "net/http"

// StdlibTransport is an adapter for integrating net/http dependend code.
// It looks like an http.RoundTripper but uses this fork internally.
type StdlibTransport struct {
Transport
}

// RoundTrip implements the http.RoundTripper interface.
func (txp *StdlibTransport) RoundTrip(stdReq *http.Request) (*http.Response, error) {
req, err := NewRequest(stdReq.Method, stdReq.URL.String(), stdReq.Body)
if err != nil {
return nil, err
}
req.Header = Header(stdReq.Header)
resp, err := txp.Transport.RoundTrip(req)
if err != nil {
return nil, err
}
stdResp := &http.Response{
Status: resp.Status,
StatusCode: resp.StatusCode,
Proto: resp.Proto,
ProtoMinor: resp.ProtoMinor,
ProtoMajor: resp.ProtoMajor,
Header: http.Header(resp.Header),
Body: resp.Body,
ContentLength: resp.ContentLength,
TransferEncoding: resp.TransferEncoding,
Close: resp.Close,
Uncompressed: resp.Uncompressed,
Trailer: http.Header(resp.Trailer),
Request: stdReq,
TLS: resp.TLS,
}
return stdResp, nil
}

0 comments on commit 35949dc

Please sign in to comment.