tls.go 970 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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. var (
  9. _ buf.MultiBufferReader = (*conn)(nil)
  10. _ buf.MultiBufferWriter = (*conn)(nil)
  11. )
  12. type conn struct {
  13. net.Conn
  14. mergingReader buf.Reader
  15. mergingWriter buf.Writer
  16. }
  17. func (c *conn) ReadMultiBuffer() (buf.MultiBuffer, error) {
  18. if c.mergingReader == nil {
  19. c.mergingReader = buf.NewMergingReaderSize(c.Conn, 16*1024)
  20. }
  21. return c.mergingReader.Read()
  22. }
  23. func (c *conn) WriteMultiBuffer(mb buf.MultiBuffer) error {
  24. if c.mergingWriter == nil {
  25. c.mergingWriter = buf.NewMergingWriter(c.Conn)
  26. }
  27. return c.mergingWriter.Write(mb)
  28. }
  29. func Client(c net.Conn, config *tls.Config) net.Conn {
  30. tlsConn := tls.Client(c, config)
  31. return &conn{Conn: tlsConn}
  32. }
  33. func Server(c net.Conn, config *tls.Config) net.Conn {
  34. tlsConn := tls.Server(c, config)
  35. return &conn{Conn: tlsConn}
  36. }