tls.go 898 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  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/tools/generrorgen/main.go -pkg tls -path Transport,Internet,TLS
  8. type conn struct {
  9. net.Conn
  10. mergingReader buf.Reader
  11. mergingWriter buf.Writer
  12. }
  13. func (c *conn) ReadMultiBuffer() (buf.MultiBuffer, error) {
  14. if c.mergingReader == nil {
  15. c.mergingReader = buf.NewMergingReaderSize(c.Conn, 16*1024)
  16. }
  17. return c.mergingReader.Read()
  18. }
  19. func (c *conn) WriteMultiBuffer(mb buf.MultiBuffer) (int, error) {
  20. if c.mergingWriter == nil {
  21. c.mergingWriter = buf.NewMergingWriter(c.Conn)
  22. }
  23. return mb.Len(), c.mergingWriter.Write(mb)
  24. }
  25. func Client(c net.Conn, config *tls.Config) net.Conn {
  26. tlsConn := tls.Client(c, config)
  27. return &conn{Conn: tlsConn}
  28. }
  29. func Server(c net.Conn, config *tls.Config) net.Conn {
  30. tlsConn := tls.Server(c, config)
  31. return &conn{Conn: tlsConn}
  32. }