feat: tlsmiddlebox experiment (#817)
See https://github.com/ooni/probe/issues/2124
This commit is contained in:
parent
b78b9aca51
commit
f2b88ddb4a
24 changed files with 1670 additions and 0 deletions
62
internal/engine/experiment/tlsmiddlebox/conn.go
Normal file
62
internal/engine/experiment/tlsmiddlebox/conn.go
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
package tlsmiddlebox
|
||||
|
||||
//
|
||||
// Wrapped TTL conn
|
||||
//
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"net"
|
||||
"syscall"
|
||||
|
||||
"github.com/ooni/probe-cli/v3/internal/netxlite"
|
||||
)
|
||||
|
||||
var errInvalidConnWrapper = errors.New("invalid conn wrapper")
|
||||
|
||||
// setConnTTL calls SetTTL to set the TTL for a dialerTTLWrapperConn
|
||||
func setConnTTL(conn net.Conn, ttl int) error {
|
||||
ttlWrapper, ok := conn.(*dialerTTLWrapperConn)
|
||||
if !ok {
|
||||
return errInvalidConnWrapper
|
||||
}
|
||||
return ttlWrapper.SetTTL(ttl)
|
||||
}
|
||||
|
||||
// getSoErr calls GetSoErr to fetch the SO_ERROR value
|
||||
func getSoErr(conn net.Conn) (soErr error, err error) {
|
||||
ttlWrapper, ok := conn.(*dialerTTLWrapperConn)
|
||||
if !ok {
|
||||
return nil, errInvalidConnWrapper
|
||||
}
|
||||
errno, err := ttlWrapper.GetSoErr()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return syscall.Errno(errno), nil
|
||||
}
|
||||
|
||||
// dialerTTLWrapperConn wraps errors as well as allows us to set the TTL
|
||||
type dialerTTLWrapperConn struct {
|
||||
net.Conn
|
||||
}
|
||||
|
||||
var _ net.Conn = &dialerTTLWrapperConn{}
|
||||
|
||||
// Read implements net.Conn.Read
|
||||
func (c *dialerTTLWrapperConn) Read(b []byte) (int, error) {
|
||||
count, err := c.Conn.Read(b)
|
||||
if err != nil {
|
||||
return 0, netxlite.NewErrWrapper(netxlite.ClassifyGenericError, netxlite.ReadOperation, err)
|
||||
}
|
||||
return count, nil
|
||||
}
|
||||
|
||||
// Write implements net.Conn.Write
|
||||
func (c *dialerTTLWrapperConn) Write(b []byte) (int, error) {
|
||||
count, err := c.Conn.Write(b)
|
||||
if err != nil {
|
||||
return 0, netxlite.NewErrWrapper(netxlite.ClassifyGenericError, netxlite.WriteOperation, err)
|
||||
}
|
||||
return count, nil
|
||||
}
|
||||
Loading…
Reference in a new issue