tls.go 811 B

12345678910111213141516171819202122232425262728293031323334353637383940
  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. func Client(c net.Conn, config *tls.Config) net.Conn {
  25. tlsConn := tls.Client(c, config)
  26. return &conn{Conn: tlsConn}
  27. }
  28. func Server(c net.Conn, config *tls.Config) net.Conn {
  29. tlsConn := tls.Server(c, config)
  30. return &conn{Conn: tlsConn}
  31. }