//go:build go1.21 && !without_badtls && with_utls

package badtls

import (
	"net"
	_ "unsafe"

	"github.com/sagernet/sing/common"
	"github.com/sagernet/utls"
)

func init() {
	tlsRegistry = append(tlsRegistry, func(conn net.Conn) (loaded bool, tlsReadRecord func() error, tlsHandlePostHandshakeMessage func() error) {
		tlsConn, loaded := common.Cast[*tls.UConn](conn)
		if !loaded {
			return
		}
		return true, func() error {
				return utlsReadRecord(tlsConn.Conn)
			}, func() error {
				return utlsHandlePostHandshakeMessage(tlsConn.Conn)
			}
	})
}

//go:linkname utlsReadRecord github.com/sagernet/utls.(*Conn).readRecord
func utlsReadRecord(c *tls.Conn) error

//go:linkname utlsHandlePostHandshakeMessage github.com/sagernet/utls.(*Conn).handlePostHandshakeMessage
func utlsHandlePostHandshakeMessage(c *tls.Conn) error