httptransport

package
v0.15.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 23, 2020 License: BSD-3-Clause Imports: 19 Imported by: 0

Documentation

Overview

Package httptransport contains HTTP transport extensions. Here we define a http.Transport that emits events.

Index

Constants

This section is empty.

Variables

View Source
var CertPool *x509.CertPool

CertPool is the certificate pool we're using by default

Functions

func NewSystemTransport

func NewSystemTransport(dialer Dialer, tlsDialer TLSDialer) *http.Transport

NewSystemTransport creates a new "system" HTTP transport. That is a transport using the Go standard library with custom dialer and TLS dialer.

Types

type ByteCountingTransport

type ByteCountingTransport struct {
	RoundTripper
	Counter *bytecounter.Counter
}

ByteCountingTransport is a RoundTripper that counts bytes.

func (ByteCountingTransport) RoundTrip

func (txp ByteCountingTransport) RoundTrip(req *http.Request) (*http.Response, error)

RoundTrip implements RoundTripper.RoundTrip

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

func NewDNSClient(config Config, URL string) (DNSClient, error)

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://powerdns`, `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.

func NewDialer added in v0.11.0

func NewDialer(config Config) Dialer

NewDialer creates a new Dialer from the specified config

type Logger

type Logger interface {
	Debugf(format string, v ...interface{})
	Debug(message string)
}

Logger is the logger assumed by this package

type LoggingTransport

type LoggingTransport struct {
	RoundTripper
	Logger Logger
}

LoggingTransport is a logging transport

func (LoggingTransport) RoundTrip

func (txp LoggingTransport) RoundTrip(req *http.Request) (*http.Response, error)

RoundTrip implements RoundTripper.RoundTrip

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

func NewResolver(config Config) Resolver

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

func (SaverBodyHTTPTransport) RoundTrip added in v0.11.0

func (txp SaverBodyHTTPTransport) RoundTrip(req *http.Request) (*http.Response, error)

RoundTrip implements RoundTripper.RoundTrip

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

func (SaverMetadataHTTPTransport) RoundTrip added in v0.11.0

func (txp SaverMetadataHTTPTransport) RoundTrip(req *http.Request) (*http.Response, error)

RoundTrip implements RoundTripper.RoundTrip

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

func (SaverPerformanceHTTPTransport) RoundTrip added in v0.11.0

func (txp SaverPerformanceHTTPTransport) RoundTrip(req *http.Request) (*http.Response, error)

RoundTrip implements RoundTripper.RoundTrip

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

func (SaverTransactionHTTPTransport) RoundTrip added in v0.11.0

func (txp SaverTransactionHTTPTransport) RoundTrip(req *http.Request) (*http.Response, error)

RoundTrip implements RoundTripper.RoundTrip

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

func NewTLSDialer(config Config) TLSDialer

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.

func (UserAgentTransport) RoundTrip

func (txp UserAgentTransport) RoundTrip(req *http.Request) (*http.Response, error)

RoundTrip implements RoundTripper.RoundTrip

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL