40 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package tlsdialer
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"crypto/tls"
 | |
| 	"net"
 | |
| 	"time"
 | |
| 
 | |
| 	"github.com/ooni/probe-cli/v3/internal/engine/internal/tlsx"
 | |
| )
 | |
| 
 | |
| // Logger is the logger assumed by this package
 | |
| type Logger interface {
 | |
| 	Debugf(format string, v ...interface{})
 | |
| 	Debug(message string)
 | |
| }
 | |
| 
 | |
| // LoggingTLSHandshaker is a TLSHandshaker with logging
 | |
| type LoggingTLSHandshaker struct {
 | |
| 	TLSHandshaker
 | |
| 	Logger Logger
 | |
| }
 | |
| 
 | |
| // Handshake implements Handshaker.Handshake
 | |
| func (h LoggingTLSHandshaker) Handshake(
 | |
| 	ctx context.Context, conn net.Conn, config *tls.Config,
 | |
| ) (net.Conn, tls.ConnectionState, error) {
 | |
| 	h.Logger.Debugf("tls {sni=%s next=%+v}...", config.ServerName, config.NextProtos)
 | |
| 	start := time.Now()
 | |
| 	tlsconn, state, err := h.TLSHandshaker.Handshake(ctx, conn, config)
 | |
| 	stop := time.Now()
 | |
| 	h.Logger.Debugf(
 | |
| 		"tls {sni=%s next=%+v}... %+v in %s {next=%s cipher=%s v=%s}", config.ServerName,
 | |
| 		config.NextProtos, err, stop.Sub(start), state.NegotiatedProtocol,
 | |
| 		tlsx.CipherSuiteString(state.CipherSuite), tlsx.VersionString(state.Version))
 | |
| 	return tlsconn, state, err
 | |
| }
 | |
| 
 | |
| var _ TLSHandshaker = LoggingTLSHandshaker{}
 |