ooni-probe-cli/internal/engine/experiment/websteps/model.go

103 lines
3.3 KiB
Go
Raw Normal View History

package websteps
import "net/http"
// RoundTrip describes a specific round trip.
type RoundTrip struct {
// proto is the protocol used, it can be "h2", "http/1.1", "h3", "h3-29"
Proto string
// Request is the original HTTP request. The headers
// also include cookies.
Request *http.Request
// Response is the HTTP response.
Response *http.Response
// sortIndex is an internal field using for sorting.
SortIndex int
}
// URLMeasurement is a measurement of a given URL that
// includes connectivity measurement for each endpoint
// implied by the given URL.
type URLMeasurement struct {
// URL is the URL we're using
URL string `json:"url"`
// DNS contains the domain names resolved by the helper.
DNS *DNSMeasurement `json:"dns"`
// RoundTrip is the related round trip.
RoundTrip *RoundTrip `json:"-"`
// Endpoints contains endpoint measurements.
Endpoints []*EndpointMeasurement `json:"endpoints"`
}
// DNSMeasurement is a DNS measurement.
type DNSMeasurement struct {
// Domain is the domain we wanted to resolve.
Domain string `json:"domain"`
// Addrs contains the resolved addresses.
Addrs []string `json:"addrs"`
// Failure is the error that occurred.
Failure *string `json:"failure"`
}
// HTTPSEndpointMeasurement is the measurement of requesting a specific endpoint via HTTPS.
type EndpointMeasurement struct {
// Endpoint is the endpoint we're measuring.
Endpoint string `json:"endpoint"`
// Protocol is the used protocol. It can be "http", "https", "h3", "h3-29" or other supported QUIC protocols
Protocol string `json:"protocol"`
// TCPConnectMeasurement is the related TCP connect measurement, if applicable (nil for h3 requests)
TCPConnectMeasurement *TCPConnectMeasurement `json:"tcp_connect"`
// QUICHandshakeMeasurement is the related QUIC(TLS 1.3) handshake measurement, if applicable (nil for http, https requests)
QUICHandshakeMeasurement *TLSHandshakeMeasurement `json:"quic_handshake"`
// TLSHandshakeMeasurement is the related TLS handshake measurement, if applicable (nil for http, h3 requests)
TLSHandshakeMeasurement *TLSHandshakeMeasurement `json:"tls_handshake"`
// HTTPRoundTripMeasurement is the related HTTP GET measurement.
HTTPRoundTripMeasurement *HTTPRoundTripMeasurement `json:"http_round_trip"`
}
// TCPConnectMeasurement is a TCP connect measurement.
type TCPConnectMeasurement struct {
// Failure is the error that occurred.
Failure *string `json:"failure"`
}
// TLSHandshakeMeasurement is a TLS handshake measurement.
type TLSHandshakeMeasurement struct {
// Failure is the error that occurred.
Failure *string `json:"failure"`
}
// HTTPRoundTripMeasurement contains a measured HTTP request and the corresponding response.
type HTTPRoundTripMeasurement struct {
Request *HTTPRequestMeasurement `json:"request"`
Response *HTTPResponseMeasurement `json:"response"`
}
// HTTPRequestMeasurement contains the headers of the measured HTTP Get request.
type HTTPRequestMeasurement struct {
Headers http.Header `json:"headers"`
Method string `json:"method"`
URL string `json:"url"`
}
// HTTPResponseMeasurement contains the response of the measured HTTP Get request.
type HTTPResponseMeasurement struct {
BodyLength int64 `json:"body_length"`
Failure *string `json:"failure"`
Headers http.Header `json:"headers"`
StatusCode int64 `json:"status_code"`
}