46 lines
1.0 KiB
Go
46 lines
1.0 KiB
Go
|
package tlsmiddlebox
|
||
|
|
||
|
//
|
||
|
// Custom TTL dialer
|
||
|
//
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"net"
|
||
|
"time"
|
||
|
|
||
|
"github.com/ooni/probe-cli/v3/internal/model"
|
||
|
"github.com/ooni/probe-cli/v3/internal/netxlite"
|
||
|
)
|
||
|
|
||
|
const timeout time.Duration = 15 * time.Second
|
||
|
|
||
|
func NewDialerTTLWrapper() model.Dialer {
|
||
|
return &dialerTTLWrapper{
|
||
|
Dialer: &net.Dialer{Timeout: timeout},
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// dialerTTLWrapper wraps errors and also returns a TTL wrapped conn
|
||
|
type dialerTTLWrapper struct {
|
||
|
Dialer model.SimpleDialer
|
||
|
}
|
||
|
|
||
|
var _ model.Dialer = &dialerTTLWrapper{}
|
||
|
|
||
|
// DialContext implements model.Dialer.DialContext
|
||
|
func (d *dialerTTLWrapper) DialContext(ctx context.Context, network string, address string) (net.Conn, error) {
|
||
|
conn, err := d.Dialer.DialContext(ctx, network, address)
|
||
|
if err != nil {
|
||
|
return nil, netxlite.NewErrWrapper(netxlite.ClassifyGenericError, netxlite.ConnectOperation, err)
|
||
|
}
|
||
|
return &dialerTTLWrapperConn{
|
||
|
Conn: conn,
|
||
|
}, nil
|
||
|
}
|
||
|
|
||
|
// CloseIdleConnections implements model.Dialer.CloseIdleConnections
|
||
|
func (d *dialerTTLWrapper) CloseIdleConnections() {
|
||
|
// nothing to do here
|
||
|
}
|