in pkg/hbone/sni.go [59:90]
func (hb *HBone) HandleSNIConn(conn net.Conn) {
s := NewBufferReader(conn)
// will also close the conn ( which is the reader )
defer s.Close()
sni, err := ParseTLS(s)
if err != nil {
log.Println("SNI invalid TLS", sni, err)
return
}
// Based on SNI, make a hbone request, using JWT auth.
if hb.EndpointResolver != nil {
dst := hb.EndpointResolver(sni)
if dst != nil {
if Debug {
log.Println("SNI: start proxy", "sni", sni, "URL", dst.URL)
}
t0 := time.Now()
err = dst.Proxy(context.Background(), s, conn)
if err != nil {
log.Println("SNI: error connecting to proxy", "sni", sni, "error", err, "URL", dst.URL)
} else {
log.Println("SNI:done", "sni", sni, "URL", dst.URL, "dur", time.Since(t0))
}
} else {
log.Println("SNI: Missing destination", "sni", sni)
}
} else {
log.Println("SNI: Missing EndpointResolver", "sni", sni)
}
}