func()

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)
	}
}