c74c94d616
We are not using them anymore. The only nettest still using the legacy netx implementation is tor, for which setting these fields is useless, because it performs each measurement into a separate goroutine. Hence, let us start removing this part of the legacy netx codebase, which is hampering progress in other areas. Occurred to me while doing testing for the recent changes in error mapping (https://github.com/ooni/probe/issues/1505).
95 lines
2.3 KiB
Go
95 lines
2.3 KiB
Go
package netx
|
|
|
|
import (
|
|
"context"
|
|
"net"
|
|
"time"
|
|
|
|
"github.com/ooni/probe-cli/v3/internal/engine/legacy/netx/modelx"
|
|
"github.com/ooni/probe-cli/v3/internal/engine/netx/dialer"
|
|
)
|
|
|
|
// EmitterDialer is a Dialer that emits events
|
|
type EmitterDialer struct {
|
|
dialer.Dialer
|
|
}
|
|
|
|
// DialContext implements Dialer.DialContext
|
|
func (d EmitterDialer) DialContext(ctx context.Context, network, address string) (net.Conn, error) {
|
|
start := time.Now()
|
|
conn, err := d.Dialer.DialContext(ctx, network, address)
|
|
stop := time.Now()
|
|
root := modelx.ContextMeasurementRootOrDefault(ctx)
|
|
root.Handler.OnMeasurement(modelx.Measurement{
|
|
Connect: &modelx.ConnectEvent{
|
|
DurationSinceBeginning: stop.Sub(root.Beginning),
|
|
Error: err,
|
|
Network: network,
|
|
RemoteAddress: address,
|
|
SyscallDuration: stop.Sub(start),
|
|
},
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return EmitterConn{
|
|
Conn: conn,
|
|
Beginning: root.Beginning,
|
|
Handler: root.Handler,
|
|
}, nil
|
|
}
|
|
|
|
// EmitterConn is a net.Conn used to emit events
|
|
type EmitterConn struct {
|
|
net.Conn
|
|
Beginning time.Time
|
|
Handler modelx.Handler
|
|
}
|
|
|
|
// Read implements net.Conn.Read
|
|
func (c EmitterConn) Read(b []byte) (n int, err error) {
|
|
start := time.Now()
|
|
n, err = c.Conn.Read(b)
|
|
stop := time.Now()
|
|
c.Handler.OnMeasurement(modelx.Measurement{
|
|
Read: &modelx.ReadEvent{
|
|
DurationSinceBeginning: stop.Sub(c.Beginning),
|
|
Error: err,
|
|
NumBytes: int64(n),
|
|
SyscallDuration: stop.Sub(start),
|
|
},
|
|
})
|
|
return
|
|
}
|
|
|
|
// Write implements net.Conn.Write
|
|
func (c EmitterConn) Write(b []byte) (n int, err error) {
|
|
start := time.Now()
|
|
n, err = c.Conn.Write(b)
|
|
stop := time.Now()
|
|
c.Handler.OnMeasurement(modelx.Measurement{
|
|
Write: &modelx.WriteEvent{
|
|
DurationSinceBeginning: stop.Sub(c.Beginning),
|
|
Error: err,
|
|
NumBytes: int64(n),
|
|
SyscallDuration: stop.Sub(start),
|
|
},
|
|
})
|
|
return
|
|
}
|
|
|
|
// Close implements net.Conn.Close
|
|
func (c EmitterConn) Close() (err error) {
|
|
start := time.Now()
|
|
err = c.Conn.Close()
|
|
stop := time.Now()
|
|
c.Handler.OnMeasurement(modelx.Measurement{
|
|
Close: &modelx.CloseEvent{
|
|
DurationSinceBeginning: stop.Sub(c.Beginning),
|
|
Error: err,
|
|
SyscallDuration: stop.Sub(start),
|
|
},
|
|
})
|
|
return
|
|
}
|