restls.go 693 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package restls
  2. import (
  3. "context"
  4. "net"
  5. tls "github.com/3andne/restls-client-go"
  6. )
  7. const (
  8. Mode string = "restls"
  9. )
  10. type Restls struct {
  11. *tls.UConn
  12. }
  13. func (r *Restls) Upstream() any {
  14. return r.UConn.NetConn()
  15. }
  16. // NewRestls return a Restls Connection
  17. func NewRestls(ctx context.Context, conn net.Conn, config *tls.Config) (net.Conn, error) {
  18. clientHellowID := tls.HelloChrome_Auto
  19. if config != nil {
  20. clientIDPtr := config.ClientID.Load()
  21. if clientIDPtr != nil {
  22. clientHellowID = *clientIDPtr
  23. }
  24. }
  25. restls := &Restls{
  26. UConn: tls.UClient(conn, config, clientHellowID),
  27. }
  28. if err := restls.HandshakeContext(ctx); err != nil {
  29. return nil, err
  30. }
  31. return restls, nil
  32. }