tls.go 947 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package tls
  2. import (
  3. "crypto/tls"
  4. "net"
  5. "v2ray.com/core/common/buf"
  6. )
  7. //go:generate go run $GOPATH/src/v2ray.com/core/common/errors/errorgen/main.go -pkg tls -path Transport,Internet,TLS
  8. var (
  9. _ buf.Writer = (*conn)(nil)
  10. )
  11. type conn struct {
  12. net.Conn
  13. mergingWriter *buf.BufferedWriter
  14. }
  15. func (c *conn) WriteMultiBuffer(mb buf.MultiBuffer) error {
  16. if c.mergingWriter == nil {
  17. c.mergingWriter = buf.NewBufferedWriter(buf.NewWriter(c.Conn))
  18. }
  19. if err := c.mergingWriter.WriteMultiBuffer(mb); err != nil {
  20. return err
  21. }
  22. return c.mergingWriter.Flush()
  23. }
  24. // Client initiates a TLS client handshake on the given connection.
  25. func Client(c net.Conn, config *tls.Config) net.Conn {
  26. tlsConn := tls.Client(c, config)
  27. return &conn{Conn: tlsConn}
  28. }
  29. // Server initiates a TLS server handshake on the given connection.
  30. func Server(c net.Conn, config *tls.Config) net.Conn {
  31. tlsConn := tls.Server(c, config)
  32. return &conn{Conn: tlsConn}
  33. }