55 lines
1.5 KiB
Go
55 lines
1.5 KiB
Go
package tlsmiddlebox
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"github.com/ooni/probe-cli/v3/internal/model"
|
|
"github.com/ooni/probe-cli/v3/internal/tracex"
|
|
)
|
|
|
|
// CompleteTrace records the result of the network trace
|
|
// using a control SNI and a target SNI
|
|
type CompleteTrace struct {
|
|
Address string `json:"address"`
|
|
ControlTrace *IterativeTrace `json:"control_trace"`
|
|
TargetTrace *IterativeTrace `json:"target_trace"`
|
|
}
|
|
|
|
// Trace is an iterative trace for the corresponding servername and address
|
|
type IterativeTrace struct {
|
|
SNI string `json:"server_name"`
|
|
Iterations []*Iteration `json:"iterations"`
|
|
|
|
mu sync.Mutex
|
|
}
|
|
|
|
// Iteration is a single network iteration with variable TTL
|
|
type Iteration struct {
|
|
TTL int `json:"ttl"`
|
|
Handshake *model.ArchivalTLSOrQUICHandshakeResult `json:"handshake"`
|
|
}
|
|
|
|
// NewIterationFromHandshake returns a new iteration from a model.ArchivalTLSOrQUICHandshakeResult
|
|
func newIterationFromHandshake(ttl int, err error, soErr error, handshake *model.ArchivalTLSOrQUICHandshakeResult) *Iteration {
|
|
if err != nil {
|
|
return &Iteration{
|
|
TTL: ttl,
|
|
Handshake: &model.ArchivalTLSOrQUICHandshakeResult{
|
|
Failure: tracex.NewFailure(err),
|
|
},
|
|
}
|
|
}
|
|
handshake.SoError = tracex.NewFailure(soErr)
|
|
return &Iteration{
|
|
TTL: ttl,
|
|
Handshake: handshake,
|
|
}
|
|
}
|
|
|
|
// addIterations adds iterations to the trace
|
|
func (t *IterativeTrace) addIterations(ev ...*Iteration) {
|
|
t.mu.Lock()
|
|
t.Iterations = append(t.Iterations, ev...)
|
|
t.mu.Unlock()
|
|
}
|