Documentation
¶
Overview ¶
Package httptransport contains HTTP transport extensions. Here we define a http.Transport that emits events.
Index ¶
- Variables
- func NewSystemTransport(dialer Dialer, tlsDialer TLSDialer) *http.Transport
- type ByteCountingTransport
- type Config
- type DNSClient
- type Dialer
- type Logger
- type LoggingTransport
- type Resolver
- type RoundTripper
- type SaverBodyHTTPTransport
- type SaverMetadataHTTPTransport
- type SaverPerformanceHTTPTransport
- type SaverTransactionHTTPTransport
- type TLSDialer
- type UserAgentTransport
Constants ¶
This section is empty.
Variables ¶
var CertPool *x509.CertPool
CertPool is the certificate pool we're using by default
Functions ¶
Types ¶
type ByteCountingTransport ¶
type ByteCountingTransport struct {
RoundTripper
Counter *bytecounter.Counter
}
ByteCountingTransport is a RoundTripper that counts bytes.
type Config ¶
type Config struct {
BaseResolver Resolver // default: system resolver
BogonIsError bool // default: bogon is not error
ByteCounter *bytecounter.Counter // default: no explicit byte counting
CacheResolutions bool // default: no caching
ContextByteCounting bool // default: no implicit byte counting
DNSCache map[string][]string // default: cache is empty
DialSaver *trace.Saver // default: not saving dials
Dialer Dialer // default: dialer.DNSDialer
FullResolver Resolver // default: base resolver + goodies
HTTPSaver *trace.Saver // default: not saving HTTP
Logger Logger // default: no logging
NoTLSVerify bool // default: perform TLS verify
ProxyURL *url.URL // default: no proxy
ReadWriteSaver *trace.Saver // default: not saving read/write
ResolveSaver *trace.Saver // default: not saving resolves
TLSConfig *tls.Config // default: attempt using h2
TLSDialer TLSDialer // default: dialer.TLSDialer
TLSSaver *trace.Saver // defaukt: not saving TLS
}
Config contains configuration for creating a new transport. When any field of Config is nil/empty, we will use a suitable default.
We use different savers for different kind of events such that the user of this library can choose what to save.
type DNSClient ¶ added in v0.12.0
type DNSClient struct {
Resolver
// contains filtered or unexported fields
}
DNSClient is a DNS client. It wraps a Resolver and it possibly also wraps an HTTP client, but only when we're using DoH.
func NewDNSClient ¶ added in v0.12.0
NewDNSClient creates a new DNS client. The config argument is used to create the underlying Dialer and/or HTTP transport, if needed. The URL argument describes the kind of client that we want to make:
- if the URL is `doh://google` or `doh://cloudflare` or the URL starts with `https://`, then we create a DoH client.
- if the URL is “ or `system:///`, then we create a system client, i.e. a client using the system resolver.
- if the URL starts with `udp://`, then we create a client using a resolver that uses the specified UDP endpoint.
We return error if the URL does not parse or the URL scheme does not fall into one of the cases described above.
If config.ResolveSaver is not nil and we're creating an underlying resolver where this is possible, we will also save events.
func (DNSClient) CloseIdleConnections ¶ added in v0.12.0
func (c DNSClient) CloseIdleConnections()
CloseIdleConnections closes idle connections, if any.
type Dialer ¶
type Dialer interface {
DialContext(ctx context.Context, network, address string) (net.Conn, error)
}
Dialer is the definition of dialer assumed by this package.
type LoggingTransport ¶
type LoggingTransport struct {
RoundTripper
Logger Logger
}
LoggingTransport is a logging transport
type Resolver ¶
type Resolver interface {
LookupHost(ctx context.Context, hostname string) (addrs []string, err error)
Network() string
Address() string
}
Resolver is the interface we expect from a resolver
func NewResolver ¶ added in v0.11.0
NewResolver creates a new resolver from the specified config
type RoundTripper ¶
type RoundTripper interface {
RoundTrip(req *http.Request) (*http.Response, error)
CloseIdleConnections()
}
RoundTripper is the definition of http.RoundTripper used by this package.
func New ¶
func New(config Config) RoundTripper
New creates a new RoundTripper. You can further extend the returned RoundTripper before wrapping it into an http.Client.
type SaverBodyHTTPTransport ¶ added in v0.11.0
type SaverBodyHTTPTransport struct {
RoundTripper
Saver *trace.Saver
SnapshotSize int
}
SaverBodyHTTPTransport is a RoundTripper that saves body events occurring during the round trip
type SaverMetadataHTTPTransport ¶ added in v0.11.0
type SaverMetadataHTTPTransport struct {
RoundTripper
Saver *trace.Saver
}
SaverMetadataHTTPTransport is a RoundTripper that saves events related to HTTP request and response metadata
type SaverPerformanceHTTPTransport ¶ added in v0.11.0
type SaverPerformanceHTTPTransport struct {
RoundTripper
Saver *trace.Saver
}
SaverPerformanceHTTPTransport is a RoundTripper that saves performance events occurring during the round trip
type SaverTransactionHTTPTransport ¶ added in v0.11.0
type SaverTransactionHTTPTransport struct {
RoundTripper
Saver *trace.Saver
}
SaverTransactionHTTPTransport is a RoundTripper that saves events related to the HTTP transaction
type TLSDialer ¶
type TLSDialer interface {
DialTLSContext(ctx context.Context, network, address string) (net.Conn, error)
}
TLSDialer is the definition of a TLS dialer assumed by this package.
func NewTLSDialer ¶ added in v0.11.0
NewTLSDialer creates a new TLSDialer from the specified config
type UserAgentTransport ¶
type UserAgentTransport struct {
RoundTripper
}
UserAgentTransport is a transport that ensures that we always set an OONI specific default User-Agent header.